Как параметризовать задания Jenkinsfile
У меня есть задания конвейера Дженкинса, где единственное различие между заданиями-параметр, одно значение "имя", я мог бы даже использовать имя задания с несколькими ветвями (хотя и не то, что он передает как JOB_NAME, которое является именем ветви, к сожалению, ни один из env не подходит без разбора). Было бы здорово, если бы я мог установить эту внешнюю сторону файла Jenkinsfile, так как тогда я мог бы использовать один и тот же файл jenkinsfile для всех различных заданий.
3 ответов
в основном вам нужно создать общая библиотека Дженкинса имя 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, который использует его (теперь имеет 2 строки)
@Library('myCoolLib') _
evenOrOdd(currentBuild.getNumber())
очевидно параметр имеет тип int, но может быть любое количество параметров любого типа.
Я использую этот подход и имею один из скриптов groovy, который имеет 3 параметра (2 строки и int) и имеет 15-20 Jenkinsfiles, которые используют этот скрипт через общую библиотеку, и он идеален. Мотивация, конечно, одно из самых основных правил в любом программировании (не цитата, А что-то вроде): если у вас есть "одинаковый код" в 2 разных местах, что-то не так.
добавьте это в свой файл Jenkinsfile:
properties([
parameters([
string(name: 'myParam', defaultValue: '')
])
])
затем, когда строить уже после запуска, вы увидите "стройте с кнопки paramtres" на UI работу.
там вы можете ввести значение paramtre, которое вы хотите.
в скрипте конвейера вы можете ссылаться на него с помощью params.myParam
есть вариант этот проект параметризован в конфигурации задания конвейера. Напишите имя переменной и значение по умолчанию, если хотите. В конвейерном доступе эта переменная с env.variable_name