Como você executa uma etapa / estágio de construção apenas se estiver construindo um branch específico?
Por exemplo, execute uma etapa de implantação apenas se o branch for chamado deployment
, deixando todo o resto igual.
Respostas:
Fazendo o mesmo na sintaxe de pipeline declarativa, abaixo estão alguns exemplos:
stage('master-branch-stuff'){
agent any
when{
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
<b
stage('feature-branch-stuff') {
agent label:'test-node'
when { branch "feature/*" }
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
<b
stage('expression-branch') {
agent label:'some-node'
when {
expression {
return env.BRANCH_NAME != 'master';
}
}
steps {
echo 'run this stage - when branch is not equal to master'
}
}
<b
stage('env-specific-stuff') {
agent label:'test-node'
when {
environment name: 'NAME', value: 'this'
}
steps {
echo 'run this stage - only if the env name and value matches'
}
}
Formas mais eficazes surgindo -
https://issues.jenkins-ci.org/browse/JENKINS-41187 Veja
também -
https://jenkins.io/doc/book/pipeline/syntax/#when
A diretiva beforeAgent true
pode ser definida para evitar a rotação de um agente para executar o condicional, se o condicional não exigir o estado git para decidir se deve ser executado:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Publicar postagem e documentos
ATUALIZAÇÃO
Nova cláusula WHEN
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
igual a - compara dois valores - strings, variáveis, números, booleanos - e retorna verdadeiro se eles forem iguais. Sinceramente, não tenho certeza de como deixamos de adicionar isso antes! Você pode fazer comparações "não iguais" usando a combinação não {igual a ...} também.
changeRequest - Em sua forma mais simples, retornará true se este Pipeline estiver construindo uma solicitação de mudança, como uma solicitação pull do GitHub. Você também pode fazer verificações mais detalhadas na solicitação de mudança, permitindo que você pergunte "esta é uma solicitação de mudança em relação ao branch master?" e muito mais.
buildingTag - Uma condição simples que apenas verifica se o Pipeline está sendo executado em uma tag no SCM, ao invés de um branch ou uma referência de commit específica.
tag - um equivalente mais detalhado de buildingTag, permitindo que você verifique o próprio nome da tag.
when{}
condição for avaliada como falsa. :(
beforeAgent true
para evitar isso
beforeAgent
agora é uma solução alternativa para isso.
Basta usar if
e env.BRANCH_NAME
, exemplo:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
De acordo com outras respostas, estou adicionando o cenário de estágios paralelos:
pipeline {
agent any
stages {
stage('some parallel stage') {
parallel {
stage('parallel stage 1') {
when {
expression { ENV == "something" }
}
steps {
echo 'something'
}
}
stage('parallel stage 2') {
steps {
echo 'something'
}
}
}
}
}
}