¿Cómo se ejecuta un paso / etapa de compilación solo si se crea una rama específica?
Por ejemplo, ejecute un paso de implementación solo si se llama a la rama deployment
, dejando todo lo demás igual.
Respuestas:
Haciendo lo mismo en la sintaxis de canalización declarativa, a continuación se muestran algunos ejemplos:
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'
}
}
Surgen formas más efectivas:
https://issues.jenkins-ci.org/browse/JENKINS-41187
También consulte:
https://jenkins.io/doc/book/pipeline/syntax/#when
La directiva beforeAgent true
se puede configurar para evitar que un agente ejecute el condicional, si el condicional no requiere que el estado de git decida si ejecutar:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Publicar publicación y documentos
ACTUALIZAR
Nueva cláusula WHEN
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
es igual a: compara dos valores (cadenas, variables, números, valores booleanos) y devuelve verdadero si son iguales. ¡Honestamente, no estoy seguro de cómo nos perdimos de agregar esto antes! También puede hacer comparaciones "no es igual a" utilizando la combinación no {igual a ...}.
changeRequest: en su forma más simple, esto devolverá verdadero si esta canalización está creando una solicitud de cambio, como una solicitud de extracción de GitHub. También puede realizar comprobaciones más detalladas de la solicitud de cambio, lo que le permite preguntar "¿Es esta una solicitud de cambio contra la rama principal?" y mucho más.
buildingTag: una condición simple que simplemente verifica si el Pipeline se está ejecutando en una etiqueta en SCM, en lugar de una rama o una referencia de compromiso específica.
tag: un equivalente más detallado de buildingTag, que le permite verificar el nombre de la etiqueta.
when{}
condición se evalúa como falsa. :(
beforeAgent true
para evitar eso
beforeAgent
ahora es una solución para eso.
Solo usa if
y env.BRANCH_NAME
, ejemplo:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Según otras respuestas, estoy agregando el escenario de etapas paralelas:
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'
}
}
}
}
}
}