Параметры сборки и пользовательский ввод

Рейтинг: 70.2% · 15 голосов
Подробный курс по Jenkins и CI/CD: установка и настройка, плагины и Configuration as Code, конвейеры (pipeline) и Jenkinsfile, declarative и scripted, агенты, Docker и Kubernetes, общие библиотеки на Groovy, безопасность и credentials, интеграции (SonarQube, артефакты), траблшутинг. Актуально на 2026.
Ответить
Аватара пользователя
Andrey_CICD
Сообщения: 47
Зарегистрирован: 11 май 2026, 05:31

Параметры сборки и пользовательский ввод

Сообщение Andrey_CICD »

Оглавление курса (47)
  1. Что такое Jenkins и зачем нужен CI/CD
  2. Jenkins в 2026: версии, экосистема и сравнение с GitLab CI и GitHub Actions
  3. Архитектура Jenkins: контроллер, агенты, узлы и исполнители
  4. Установка Jenkins: пакеты, Docker и Kubernetes
  5. Первичная настройка Jenkins: мастер, плагины, пользователи
  6. Плагины Jenkins: установка, обновление и ключевой набор
  7. Configuration as Code (JCasC): настройка Jenkins декларативно
  8. Конвейеры Jenkins и Jenkinsfile: pipeline as code
  9. Scripted против Declarative: два синтаксиса конвейера
  10. Структура конвейера: node, stage, steps и первый pipeline
  11. Генератор сниппетов, запуск конвейера и Replay
  12. Типы заданий Jenkins: Freestyle, Pipeline, Multibranch и Organization
  13. Декларативный конвейер: структура pipeline, agent, stages
  14. agent, environment и переменные в конвейере
  15. tools, options, parameters и triggers в декларативном конвейере
  16. stages, parallel и matrix: организация этапов
  17. Условное выполнение when и блок post
  18. Триггеры сборки: webhook от GitHub, SCM polling и расписание
  19. Параметры сборки и пользовательский ввод (вы здесь)
  20. Управление потоком: timeout, retry, sleep и waitUntil
  21. Параллелизм и блокировки: parallel, lock, milestone
  22. Постобработка и уведомления о результате сборки
  23. Groovy для Jenkins: основы скриптового конвейера
  24. Скриптовый конвейер: логика, циклы и функции
  25. Общие библиотеки Jenkins: Shared Libraries
  26. Подключение и загрузка общих библиотек
  27. Шаги оболочки: sh, bat, powershell и коды возврата
  28. Переменные среды, withEnv и рабочие пространства
  29. Работа с файлами, артефактами и отпечатками
  30. Сборка проектов в конвейере: Maven, Gradle, npm
  31. Качество кода: SonarQube и покрытие тестами
  32. Управление артефактами: публикация в Nexus и Artifactory
  33. Docker в Jenkins: образы как агенты сборки
  34. Сборка и публикация Docker-образов из конвейера
  35. Jenkins в Kubernetes: динамические pod-агенты
  36. Развёртывание в Kubernetes из конвейера
  37. Безопасность Jenkins: аутентификация и матрица прав
  38. Учётные данные Jenkins: credentials в конвейере
  39. Безопасность сценариев: Groovy sandbox и Vault
  40. Уведомления и отчёты: email, Slack, Telegram, HTML
  41. Blue Ocean и интерфейс Jenkins в 2026
  42. Автоматизация Jenkins: CLI, REST API и script console
  43. Поиск и устранение неисправностей: читаем логи конвейера
  44. Типичные ошибки конвейера: сериализация и неутверждённый код
  45. Эксплуатация Jenkins: бэкап, обновление, масштабирование
  46. Конвертация и миграция: от Freestyle к Jenkinsfile
  47. Итог: сквозной CI/CD конвейер и Jenkins против альтернатив в 2026
Представь конвейер, который собирает и катит в прод по любому пушу, ни о чём не спрашивая. Звучит как мечта о полной автоматизации, но на практике рано или поздно прилетает релиз в пятницу вечером, который никто не хотел выкатывать. Или кто-то запускает сборку и не может выбрать, в какое окружение деплоить, потому что окружение зашито в коде. Жёсткий пайплайн неудобен ровно там, где нужна гибкость и человеческий контроль.

В этом уроке разберём два механизма, которые делают конвейер интерактивным: блок parameters - чтобы задавать вход сборки при запуске, и шаг input - чтобы поставить пайплайн на паузу прямо посреди выполнения и дождаться решения человека. Это база для параметризованного и ручного запуска в Jenkins, для аппрува деплоя в прод и для одного Jenkinsfile, который умеет катить в разные окружения. Build, на котором всё показываем, у нас 393.

Jenkins parameters: параметры сборки на входе

Параметры - это значения, которые ты задаёшь в момент запуска сборки, до того как пайплайн начнёт работать. Объявляются они в declarative-конвейере блоком parameters внутри pipeline. Как только в Jenkinsfile появляется этот блок, кнопка "Собрать" в интерфейсе превращается в "Собрать с параметрами" (Build with Parameters), и Jenkins показывает форму с полями.

Базовых типов несколько, и их хватает в 90 процентах случаев:
  • string - однострочное текстовое поле. Версия, имя ветки, тег.
  • choice - выпадающий список. Идеально для выбора окружения: dev, staging, prod. Первый элемент списка - значение по умолчанию.
  • booleanParam - чекбокс. Прогнать ли тесты, делать ли пуш образа.
  • password - поле, в котором ввод маскируется звёздочками в форме.
  • text - многострочное поле для длинного текста.
Вот рабочий пример. Сборка спрашивает окружение, версию, флаг тестов:

Код: Выделить всё

pipeline {
    agent any

    parameters {
        choice(
            name: 'DEPLOY_ENV',
            choices: ['dev', 'staging', 'prod'],
            description: 'Куда катим'
        )
        string(
            name: 'VERSION',
            defaultValue: '1.0.0',
            description: 'Версия артефакта'
        )
        booleanParam(
            name: 'RUN_TESTS',
            defaultValue: true,
            description: 'Прогнать тесты перед сборкой'
        )
    }

    stages {
        stage('Info') {
            steps {
                echo "Окружение: ${params.DEPLOY_ENV}"
                echo "Версия: ${params.VERSION}"
                sh 'echo "Тесты включены: ${RUN_TESTS}"'
            }
        }
        stage('Test') {
            when { expression { params.RUN_TESTS } }
            steps {
                sh 'make test'
            }
        }
    }
}
Доступ к значениям - через объект params. В Groovy-выражениях пишешь params.DEPLOY_ENV, в shell-шаге значения параметров видны как переменные окружения, поэтому внутри sh используешь $RUN_TESTS. Обрати внимание на одинарные кавычки в sh: они отдают подстановку shell-у, а не Groovy, и это правильнее с точки зрения безопасности - значение не вклеивается в текст команды до выполнения.

Важный нюанс первого запуска. Когда ты добавляешь блок parameters в Jenkinsfile, при первой сборке после изменения Jenkins ещё не знает про новые параметры - форму он покажет только со второго раза. Поэтому первый прогон после правки часто идёт со значениями по умолчанию. Это нормально, не баг.

Изображение

Шаг input: ручной аппрув и пауза посреди пайплайна

parameters спрашивает на входе. А что, если нужно спросить человека в середине - после сборки и тестов, но перед выкаткой в прод? Для этого есть шаг input. Он останавливает конвейер и ждёт, пока кто-то нажмёт "Подтвердить" или "Прервать" в интерфейсе или в Pipeline Stage View.

Самый частый сценарий - ручной аппрув деплоя. Собрали, протестировали, прогнали стейджинг, а дальше пайплайн замирает и спрашивает у дежурного: "Катим в прод?" Никакой автоматики, решение за человеком.

Код: Выделить всё

pipeline {
    agent any

    parameters {
        choice(name: 'DEPLOY_ENV', choices: ['staging', 'prod'])
    }

    stages {
        stage('Build') {
            steps { sh 'make build' }
        }
        stage('Deploy to staging') {
            steps { sh './deploy.sh staging' }
        }
        stage('Approve prod') {
            when { expression { params.DEPLOY_ENV == 'prod' } }
            steps {
                timeout(time: 30, unit: 'MINUTES') {
                    input(
                        message: 'Выкатить build 393 в прод?',
                        ok: 'Деплой',
                        submitter: 'lead,release-team'
                    )
                }
            }
        }
        stage('Deploy to prod') {
            when { expression { params.DEPLOY_ENV == 'prod' } }
            steps { sh './deploy.sh prod' }
        }
    }
}
Разберём параметры шага. message - текст вопроса. ok - надпись на кнопке подтверждения. submitter - список логинов или групп через запятую, кому разрешено подтверждать; остальные кнопку нажать не смогут. Это и есть ограничение "кто может подтвердить" - чтобы аппрув прода не нажал случайный человек.

Обязательно оборачивай input в timeout. Без таймаута сборка может висеть в ожидании вечно, занимая слот в очереди. С timeout по истечении времени input сам прервётся (по умолчанию с ошибкой), и сборка завершится - что обычно и нужно: не подтвердили за полчаса, значит не катим.

Возврат значений из input и параметры в Multibranch

input умеет не только спрашивать "да или нет" - он может вернуть значение. Если добавить внутрь блок parameters, человек на паузе выбирает вариант, и результат присваивается переменной. Когда параметр один, возвращается прямо его значение; когда несколько - map. Тут к месту scripted-вставка через script, потому что нужна динамика - присвоить результат и потом им пользоваться:

Код: Выделить всё

stage('Choose target') {
    steps {
        script {
            def target = input(
                message: 'Выбери цель деплоя',
                ok: 'Поехали',
                parameters: [
                    choice(name: 'REGION', choices: ['eu', 'us', 'asia'])
                ]
            )
            echo "Деплоим в регион: ${target}"
            sh "./deploy.sh --region=${target}"
        }
    }
}
Ещё одна полезная опция - submitterParameter. Если её указать, в результат попадёт логин того, кто подтвердил. Удобно для аудита: записать в лог или в тег артефакта, кто именно дал добро на прод.

Где input ставить - на уровне stage или внутри steps - не формальность, а вопрос ресурсов. Если повесить input на агенте (внутри stage с agent), агент будет занят всё время ожидания и будет простаивать впустую. Поэтому стадию аппрува часто делают на отдельном лёгком агенте или вообще держат input так, чтобы тяжёлый агент освобождался на время паузы. В Kubernetes-сетапе с эфемерными pod-агентами это особенно заметно: держать pod живым полчаса ради ожидания клика - расточительно.

Про параметризованные сборки в Multibranch. Multibranch Pipeline берёт Jenkinsfile из каждой ветки и заводит отдельный job. Параметры здесь тоже работают: блок parameters в Jenkinsfile ветки даёт ту же форму "Собрать с параметрами". Тонкость в том, что Multibranch-джобы умеют запускаться автоматически по событию (push, обнаружение ветки), и при автозапуске форма не показывается - берутся значения по умолчанию. Ручной запуск (jenkins ручной запуск через "Собрать с параметрами") форму покажет. Поэтому для веток, которые катятся автоматически, держи вменяемые defaultValue, а интерактив через input оставляй для критичных стадий.

Типичные грабли
  • Ждёшь форму параметров на первом прогоне после правки Jenkinsfile - её не будет, параметры регистрируются со второго запуска.
  • input без timeout - зависшая навечно сборка, занятый исполнитель. Всегда оборачивай.
  • Забыл submitter - аппрув прода может нажать кто угодно с доступом к Jenkins.
  • input внутри stage с дорогим агентом - агент простаивает всё ожидание. Выноси паузу так, чтобы освобождать ресурсы.
  • password-параметр - это не credentials. Значение всё равно попадает в конфиг job и в историю. Для настоящих секретов бери блок credentials и withCredentials, а password-параметр - только для разовых нечувствительных вводов.
  • Сравнение booleanParam как строки. params.RUN_TESTS - это уже boolean, пиши when { expression { params.RUN_TESTS } }, без == 'true'.
Мини-лаба

Собери руками один Jenkinsfile:
  • Добавь parameters: choice DEPLOY_ENV (dev, staging, prod), string VERSION, booleanParam RUN_TESTS.
  • Запусти сборку дважды - убедись, что форма "Собрать с параметрами" появилась только на втором прогоне.
  • Сделай стадию тестов условной через when и params.RUN_TESTS, проверь оба значения чекбокса.
  • Добавь стадию аппрува с input, message про прод, ok "Деплой", submitter на свой логин, оберни в timeout 30 минут.
  • Попробуй подтвердить под другим пользователем - кнопка не должна сработать. Дай таймауту истечь - сборка должна завершиться.
  • Через input с parameters верни choice REGION и используй значение в sh-шаге.
Контрольные вопросы
  • Через какой объект в declarative-пайплайне доступны значения параметров и почему форма не появляется на первом прогоне после правки?
  • Зачем input оборачивают в timeout и что делает параметр submitter?
  • Как из шага input вернуть выбранное пользователем значение в переменную?
  • Чем password-параметр отличается от реальных credentials и где какой использовать?
Итог

parameters делает вход сборки гибким - одно окружение или другое, с тестами или без, без правки кода. input добавляет человека в петлю: пауза, ручной аппрув деплоя, выбор варианта прямо посреди пайплайна, с таймаутом и ограничением, кто может подтвердить. Вместе они превращают конвейер из жёсткого автомата в управляемый инструмент. На актуальных Jenkins LTS (линия 2.541.x в начале 2026, новый baseline 2.555 уже на Java 21/25) синтаксис тот же - declarative parameters и шаг input остаются стандартом. В следующих уроках это пригодится для безопасного выката в прод и для пайплайнов, которые разные люди запускают по-разному.
👍 ❤️3 🔥1 😄 🤔1
Аватара пользователя
jones24
Сообщения: 1
Зарегистрирован: 26 май 2026, 23:42

Re: Параметры сборки и пользовательский ввод

Сообщение jones24 »

Наконец понял разницу между password-параметром и credentials, а то тащил пароли через string и удивлялся откуда они в истории джобы. Спасибо за грабли отдельным списком.
👍1 ❤️1 🔥1 😄 🤔1
Аватара пользователя
max2003
Сообщения: 1
Зарегистрирован: 19 май 2026, 18:55

Re: Параметры сборки и пользовательский ввод

Сообщение max2003 »

Вопрос: а если submitter указать группу из LDAP, оно подхватит вложенные группы или только прямых членов? У нас release-team вложена в devops и аппрув иногда не даёт нажать.
👍 ❤️1 🔥 😄 🤔1
Ответить
← Предыдущая глава
Триггеры сборки: webhook от GitHub, SCM polling и расписание
Следующая глава →
Управление потоком: timeout, retry, sleep и waitUntil

Все главы курса «Jenkins: конвейеры CI/CD от основ до продакшена»

Поделиться темой: ✈ Telegram VK
Похожие запросы: параметры и параллельные стейджи в jenkins pipeline

Вернуться в «Jenkins: конвейеры CI/CD от основ до продакшена»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя