Основная проблема здесь заключается в том, что вы хотите необязательный / условный stage
в конвейере, основанный на переменной среды или параметрах сборки.Декларативные конвейеры Jenkins имеют условных этапов , но они не работают со скриптовыми конвейерами (groovy в Jenkinsfile
).
Я импровизировал на groovy замыкании, чтобы пропустить фактические этапы сборки на основе логического значенияпараметр сборки.
Пример кода
import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
/**
* Stage execution helper for skipping stages based on flag.
*
* @argument name of the stage
* @argument execute boolean flag
* @argument block to be execute if flag true
*/
def stage(name, execute, block) {
return stage(name, execute ? block : {
echo "Skipped stage $name"
Utils.markStageSkippedForConditional(STAGE_NAME)
})
}
node('master') {
try {
def parameterList = []
// additional parameters
parameterList.add(booleanParam(name: 'JUST_UPDATE_JOB_CONFIG', description: 'Just Update the configuration of this job'))
properties([
parameters(parameterList)
])
stage('Update-JobConfig', JUST_UPDATE_JOB_CONFIG == 'true') {
echo 'Updated Job Config'
}
stage('Build Stage 1', JUST_UPDATE_JOB_CONFIG != 'true') {
// some steps
}
stage('Build Stage 2', JUST_UPDATE_JOB_CONFIG != 'true') {
// some steps
}
} catch (e) {
throw e
}
}
Когда я изменяю свой конвейерный код в SCM, я просто строю работу с проверенным параметром JUST_UPDATE_JOB_CONFIG
.Трюк здесь - def stage(...
, который фактически пропускает этапы, основанные на флаге.
Не уверен, что это правильный способ сделать это, но он работает для меня.