Come si esegue un passaggio / fase di compilazione solo se si crea un ramo specifico?
Ad esempio, eseguire un passaggio di distribuzione solo se viene chiamato il ramo deployment
, lasciando tutto il resto uguale.
Risposte:
Facendo lo stesso nella sintassi dichiarativa della pipeline, di seguito sono riportati alcuni esempi:
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'
}
}
Modi più efficaci in arrivo:
https://issues.jenkins-ci.org/browse/JENKINS-41187
Guarda anche -
https://jenkins.io/doc/book/pipeline/syntax/#when
La direttiva beforeAgent true
può essere impostata per evitare di avviare un agente per eseguire il condizionale, se il condizionale non richiede che git state decida se eseguire:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Pubblicazione di post e documenti
AGGIORNAMENTO
Nuova clausola WHEN
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
è uguale a - Confronta due valori - stringhe, variabili, numeri, valori booleani - e restituisce vero se sono uguali. Onestamente non sono sicuro di come ci siamo persi aggiungendo questo prima! Puoi fare confronti "non uguale a" usando anche la combinazione non {uguale a ...}.
changeRequest: nella sua forma più semplice, restituirà true se questa pipeline sta creando una richiesta di modifica, come una richiesta pull di GitHub. Puoi anche fare controlli più dettagliati rispetto alla richiesta di modifica, permettendoti di chiedere "questa è una richiesta di modifica contro il ramo master?" e altro ancora.
buildingTag: una condizione semplice che controlla solo se la pipeline è in esecuzione rispetto a un tag in SCM, piuttosto che un ramo o un riferimento di commit specifico.
tag - Un equivalente più dettagliato di buildingTag, che consente di confrontare il nome del tag stesso.
when{}
condizione risulta falsa. :(
beforeAgent true
per evitarlo
beforeAgent
ora è una soluzione alternativa.
Usa if
e env.BRANCH_NAME
, esempio:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Secondo altre risposte aggiungo lo scenario delle fasi parallele:
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'
}
}
}
}
}
}