Как использовать параметры, условия и параллельные стадии в Jenkins Pipeline
Параметры, условия и параллельные стадии — это механизмы Declarative Pipeline, которые делают пайплайн гибким: параметры позволяют настраивать сборку при запуске, условия управляют выполнением стадий, а параллельные стадии ускоряют пайплайн.
Параметры (parameters)
Параметры позволяют задавать входные данные при запуске сборки. Доступные типы: string, choice, booleanParam, password, text.
Пример
pipeline {
agent any
parameters {
string(name: 'BRANCH', defaultValue: 'main', description: 'Branch to build')
choice(name: 'ENVIRONMENT', choices: ['dev', 'staging', 'production'],
description: 'Target environment')
booleanParam(name: 'SKIP_TESTS', defaultValue: false, description: 'Skip tests')
password(name: 'DEPLOY_TOKEN', description: 'Deployment token')
}
stages {
stage('Build') {
steps {
echo "Building branch: ${params.BRANCH}"
sh "mvn clean package ${params.SKIP_TESTS ? '-DskipTests' : ''}"
}
}
stage('Deploy') {
steps {
echo "Deploying to: ${params.ENVIRONMENT}"
}
}
}
}
Важно: при первом запуске пайплайна параметры ещё не существуют — Jenkins создает их после первого прогона. Последующие запуски покажут форму с параметрами.
Условия (when)
Директива when определяет, при каких условиях выполняется стадия. Основные условия:
| Условие | Описание |
|---|---|
branch 'main' |
Только для указанной ветки |
expression { ... } |
Произвольное Groovy-выражение |
environment name: 'X', value: 'Y' |
Переменная окружения равна значению |
changeRequest() |
Сборка запущена для Pull Request |
not { ... } |
Отрицание условия |
allOf { ... } |
Все условия выполнены (AND) |
anyOf { ... } |
Хотя бы одно условие выполнено (OR) |
Пример использования when
stages {
stage('Deploy to Staging') {
when {
branch 'develop' // Только для ветки develop
}
steps { sh './deploy.sh staging' }
}
stage('Deploy to Production') {
when {
allOf {
branch 'main'
expression { params.ENVIRONMENT == 'production' }
}
}
steps {
input message: 'Deploy to production?', ok: 'Deploy'
sh './deploy.sh production'
}
}
stage('SonarQube') {
when {
not { changeRequest() } // Не для pull request
}
steps { sh 'mvn sonar:sonar' }
}
}
Параллельные стадии (parallel)
Параллельные стадии позволяют выполнять несколько задач одновременно, сокращая общее время пайплайна.
Пример
stage('Tests') {
parallel {
stage('Unit Tests') {
steps { sh 'mvn test -pl unit-tests' }
}
stage('Integration Tests') {
agent { label 'docker' }
steps { sh 'mvn verify -pl integration-tests' }
}
stage('Security Scan') {
steps { sh 'mvn dependency-check:check' }
}
}
}
Важно: по умолчанию, если одна параллельная стадия упадет, остальные продолжат выполнение. Чтобы прервать все при первой ошибке, используйте failFast true:
Пример
stage('Tests') {
failFast true
parallel {
stage('Unit Tests') { steps { sh 'mvn test' } }
stage('Integration Tests') { steps { sh 'mvn verify -Pit' } }
}
}
Комбинирование параметров, условий и параллелизма
Полный пример
pipeline {
agent any
parameters {
choice(name: 'ENV', choices: ['dev', 'staging', 'prod'], description: 'Target')
booleanParam(name: 'RUN_SECURITY', defaultValue: true, description: 'Security scan')
}
stages {
stage('Build') {
steps { sh 'mvn clean compile' }
}
stage('Quality Checks') {
parallel {
stage('Unit Tests') {
steps { sh 'mvn test' }
}
stage('Security Scan') {
when { expression { params.RUN_SECURITY } }
steps { sh 'mvn dependency-check:check' }
}
}
}
stage('Deploy') {
when { expression { params.ENV == 'prod' } }
steps {
input message: 'Confirm production deploy?', submitter: 'release-managers'
sh './deploy.sh prod'
}
}
}
}
Вывод
Параметры, условия и параллельные стадии — три столпа гибкости Declarative Pipeline. Параметры делают пайплайн настраиваемым, when — адаптивным к контексту (ветка, PR, окружение), а parallel — быстрым.
На собеседовании: часто дают задачу: «Напишите пайплайн, который деплоит на production только из ветки main с ручным подтверждением». Это проверяет знание
when,inputиparametersодновременно.