Im Folgenden finden Sie einige Beispiele für die deklarative Pipeline-Syntax:
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'
}
}
Effektivere Möglichkeiten -
https://issues.jenkins-ci.org/browse/JENKINS-41187 Siehe
auch -
https://jenkins.io/doc/book/pipeline/syntax/#when
Die Anweisung beforeAgent true
kann festgelegt werden, um zu vermeiden, dass ein Agent zum Ausführen der Bedingung hochgefahren wird, wenn für die Bedingung kein Git-Status erforderlich ist, um zu entscheiden, ob Folgendes ausgeführt werden soll:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Beitrag und Dokumente freigeben
UPDATE
New WHEN-Klausel
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
gleich - Vergleicht zwei Werte - Zeichenfolgen, Variablen, Zahlen, Boolesche Werte - und gibt true zurück, wenn sie gleich sind. Ich bin mir ehrlich gesagt nicht sicher, wie wir es verpasst haben, dies früher hinzuzufügen! Sie können auch "nicht gleich" -Vergleiche mit der Kombination "nicht {gleich ...}" durchführen.
changeRequest - In seiner einfachsten Form gibt dies true zurück, wenn diese Pipeline eine Änderungsanforderung erstellt, z. B. eine GitHub-Pull-Anforderung. Sie können auch detailliertere Überprüfungen der Änderungsanforderung durchführen, um zu fragen, ob dies eine Änderungsanforderung für die Hauptniederlassung ist. und vieles mehr.
buildingTag - Eine einfache Bedingung, die nur prüft, ob die Pipeline für ein Tag in SCM ausgeführt wird und nicht für einen Zweig oder eine bestimmte Festschreibungsreferenz.
tag - Ein detaillierteres Äquivalent zu buildingTag, mit dem Sie den Tag-Namen selbst überprüfen können.
when{}
Bedingung als falsch ausgewertet wird. :(beforeAgent true
, um das zu vermeidenbeforeAgent
ist jetzt in der Tat eine Problemumgehung dafür.Verwenden Sie einfach
if
undenv.BRANCH_NAME
, Beispiel:if (env.BRANCH_NAME == "deployment") { ... do some build ... } else { ... do something else ... }
quelle
Nach anderen Antworten füge ich das Szenario der parallelen Stufen hinzu:
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' } } } } } }
quelle