Comment exécuter une étape / étape de construction uniquement si vous créez une branche spécifique?
Par exemple, exécutez une étape de déploiement uniquement si la branche est appelée deployment
, en laissant tout le reste inchangé.
Réponses:
En faisant de même dans la syntaxe déclarative du pipeline, voici quelques exemples:
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'
}
}
Des moyens plus efficaces à venir -
https://issues.jenkins-ci.org/browse/JENKINS-41187
Regardez également -
https://jenkins.io/doc/book/pipeline/syntax/#when
La directive beforeAgent true
peut être définie pour éviter de faire tourner un agent pour exécuter le conditionnel, si le conditionnel ne nécessite pas l'état de git pour décider s'il doit s'exécuter:
when { beforeAgent true; expression { return isStageConfigured(config) } }
Publier le message et les documents
MISE À JOUR
Nouvelle clause WHEN
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals - Compare deux valeurs - chaînes, variables, nombres, booléens - et renvoie true si elles sont égales. Honnêtement, je ne sais pas comment nous avons manqué d'ajouter cela plus tôt! Vous pouvez également effectuer des comparaisons "not égal" en utilisant la combinaison not {equals ...}.
changeRequest - Dans sa forme la plus simple, cela retournera true si ce Pipeline construit une demande de changement, telle qu'une demande d'extraction GitHub. Vous pouvez également effectuer des vérifications plus détaillées par rapport à la demande de changement, ce qui vous permet de demander "est-ce une demande de changement par rapport à la branche principale?" et beaucoup plus.
buildingTag - Une condition simple qui vérifie simplement si le Pipeline s'exécute sur une balise dans SCM, plutôt qu'une branche ou une référence de validation spécifique.
tag - Un équivalent plus détaillé de buildingTag, vous permettant de vérifier le nom du tag lui-même.
when{}
condition est évaluée à false. :(
beforeAgent true
pour éviter cela
beforeAgent
est maintenant une solution de contournement pour cela.
Utilisez simplement if
et env.BRANCH_NAME
, exemple:
if (env.BRANCH_NAME == "deployment") {
... do some build ...
} else {
... do something else ...
}
Selon d'autres réponses, j'ajoute le scénario des étapes parallèles:
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'
}
}
}
}
}
}