У меня есть рабочие задания Jenkins Pipeline, где единственное различие между заданиями - это параметр, одно значение "имя", я мог бы даже использовать имя задания для многоканальной работы (хотя не то, что он передает как JOB_NAME, который является именем ФИЛИАЛА, к сожалению ни один из envs не подходит без разбора). Было бы здорово, если бы я мог установить этот внешний вид из файла Jenkins, так как тогда я мог бы повторно использовать один и тот же файл jenkins для всех различных заданий.
Как я могу параметризовать задания Jenkinsfile
Ответ 1
В принципе вам нужно создать jenkins shared library имя примера myCoolLib
и иметь полный декларативный конвейер в одном файле в vars, скажем, вы вызываете файл myFancyPipeline.groovy
.
Хотелось написать мои примеры, но на самом деле я вижу документы довольно приятные, поэтому я буду копировать оттуда. Сначала myFancyPipeline.groovy
def call(int buildNumber) {
if (buildNumber % 2 == 0) {
pipeline {
agent any
stages {
stage('Even Stage') {
steps {
echo "The build number is even"
}
}
}
}
} else {
pipeline {
agent any
stages {
stage('Odd Stage') {
steps {
echo "The build number is odd"
}
}
}
}
}
}
а затем aJenkinsfile, который использует его (теперь имеет две строки)
@Library('myCoolLib') _
evenOrOdd(currentBuild.getNumber())
Очевидно, что здесь параметр имеет тип int, но может быть любое количество параметров любого типа.
Я использую этот подход и имею один из сценариев groovy, который имеет 3 параметра (2 строки и int) и имеет 15-20 файлов Jenkinsfiles, которые используют эту script через общую библиотеку, и это идеально. Мотивация - это, конечно, одно из самых основных правил в любом программировании (не цитата, а что-то вроде): если у вас есть "тот же код" в 2 разных местах, что-то не так.
Ответ 2
Добавьте это в свой файл Jenkins:
properties([
parameters([
string(name: 'myParam', defaultValue: '')
])
])
Затем, как только сборка будет запущена один раз, вы увидите кнопку "build with paramtres" в пользовательском интерфейсе задания.
Здесь вы можете ввести нужное значение paramtre.
В конвейере script вы можете ссылаться на него с помощью params.myParam
Ответ 3
Имеется опция. Этот проект параметризуется в конфигурации заданий вашего конвейера. Запишите имя переменной и значение по умолчанию, если хотите. В конвейере доступ к этой переменной с помощью env.variable_name