No dia a dia de uma empresa que usa o Jenkins como solução de CI/CD existem momentos em que o tide de infraestrutura, ou até mesmo o desenvolvimento, precisa executar apenas uma etapa da pipeline.
Em uma pipeline tradicional isso não é possível, o Jenkins vai executar todos os passos, build, testes, publicar artefatos e fazer o deploy no ambiente selecionado.
Mas e se a pipeline falhou em apenas uma etapa? Digamos por exemplo que o deploy no ambiente K8S deu timeout, ou você fez uma mudança apenas na etapa de teste, precisa mesmo rodar a pipeline toda?
A ideia deste artigo é mostrar como eu fiz para selecionar quais etapas da pipeline executar usando parâmetros.
De acordo com a documentação do Jenkins é possível usar parâmetros para isso.
pipeline {
agent any
parameters {
string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
}
stages {
stage('Example') {
steps {
echo "Hello ${params.PERSON}"
echo "Biography: ${params.BIOGRAPHY}"
echo "Toggle: ${params.TOGGLE}"
echo "Choice: ${params.CHOICE}"
echo "Password: ${params.PASSWORD}"
}
}
}
}
Então usando a pipeline abaixo, conseguimos definir no momento do build se queremos ou não rodar uma das etapas da pipeline.
pipeline {
agent any
parameters {
booleanParam(name: 'RUN_TESTS', defaultValue: true, description: 'Should we run tests before deployment?')
}
stages {
stage('Test') {
when {
expression {
return params.RUN_TESTS
}
}
steps {
sh '${FABRIC} test'
}
}
stage('Deploy') {
steps {
sh '${FABRIC} deploy'
}
}
}
}
Um dos pontos importantes no ambiente real foi a definição de variáveis. Se por alguma razão a sua pipeline define variáveis dentro da etapa selecionada para não ser executada a sua pipeline poderá falhar por isso, então não esqueça de verificar se dentro das etapas que você escolheu pular existem passos que serão usadas no restante da pipeline.