Comment exécuter une étape/stage de construction uniquement si l'on construit une branche spécifique ?
Par exemple, exécuter une étape de déploiement uniquement si la branche est appelée deployment
en laissant tout le reste inchangé.
Comment exécuter une étape/stage de construction uniquement si l'on construit une branche spécifique ?
Par exemple, exécuter une étape de déploiement uniquement si la branche est appelée deployment
en laissant tout le reste inchangé.
En faisant la même chose dans la syntaxe déclarative du pipeline, voici quelques exemples :
stage('master-branch-stuff') {
when {
branch 'master'
}
steps {
echo 'run this stage - ony if the branch = master branch'
}
}
stage('feature-branch-stuff') {
when {
branch 'feature/*'
}
steps {
echo 'run this stage - only if the branch name started with feature/'
}
}
stage('expression-branch') {
when {
expression {
return env.BRANCH_NAME != 'master';
}
}
steps {
echo 'run this stage - when branch is not equal to master'
}
}
stage('env-specific-stuff') {
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 aussi - https://jenkins.io/doc/book/pipeline/syntax/#when
La directive beforeAgent true
peut être défini pour éviter de lancer un agent pour exécuter la condition, si la condition ne nécessite pas l'état de git pour décider de son exécution :
when { beforeAgent true; expression { return isStageConfigured(config) } }
UPDATE
Nouvelle clause WHEN
REF : https://jenkins.io/blog/2018/04/09/whats-in-declarative
equals - Compare deux valeurs (chaînes de caractères, variables, nombres, booléens). et renvoie vrai si elles sont égales. Honnêtement, je ne sais pas comment nous avons manqué ajouter cette fonction plus tôt ! Vous pouvez effectuer des comparaisons "non égales" en utilisant la fonction not { equals ... }.
changeRequest - Dans sa forme la plus simple, ceci renvoie true si ce Pipeline est en train de construire une demande de modification, telle qu'une demande de retrait GitHub. Vous pouvez également effectuer des vérifications plus détaillées par rapport à la demande de modification, vous permettant de demander "est-ce une demande de changement contre la branche master et bien plus encore.
buildingTag - Une condition simple qui vérifie simplement si le Pipeline est s'exécute sur une étiquette dans SCM, plutôt que sur une branche ou une référence de référence de commit.
tag - Un équivalent plus détaillé de buildingTag, vous permettant de vérifier contre le nom du tag lui-même.
Je trouve que Jenkins lance l'agent spécifié même si le when{}
La condition est évaluée à false :(
Je rajoute cette réponse pour mentionner explicitement l'utilisation d'une condition dans une étape à l'inverse d'un escenario à la fois dans pipelines déclaratifs .
Comme l'ont déjà montré @Chandan Nayak et d'autres, cela peut être fait en se basant sur when
dans le cas de
stage('myConditionalStage') {
when {
branch 'myBranch'
}
steps {
echo 'triggered by myBranch'
}
}
Donc la scène myConditionalStage
ne sera exécutée que si elle est déclenchée par un push vers myBranch
.
Si toutefois vous avez besoin d'une condition dans la section des étapes d'une étape, vous pouvez utiliser la syntaxe Groovy ( if/else
dans ce cas) qui est utilisé dans Pipelines scriptés . En cas de Pipeline déclaratif vous devez le mettre dans un script
comme suit :
stage('myStage') {
steps {
echo 'within myStage'
script {
if (env.BRANCH_NAME == "myBranch") {
echo 'triggered by myBranch'
} else {
echo 'triggered by something else'
}
}
}
}
Pour un Pipeline sous forme de script vous pouvez l'utiliser sans l'option script
bloc comme montré par @Krzysztof Krasoń
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'
}
}
}
}
}
}
Si vous vous exécutez contre une demande de tirage en utilisant le plugin ghprb [github pull request builder], le nom de la branche apparaîtra comme origin/pr/<<#PRNumber>>/merge.
Dans ce cas, les noms des branches peuvent être capturés en utilisant la variable d'environnement ci-dessous.
when { environment name: 'ghprbSourceBranch', value: 'engine_staging' }
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.