Je crée un exemple de pipeline Jenkins, voici le code.
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo hello'
}
}
stage('test1') {
steps {
sh 'echo $TEST'
}
}
stage('test3') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
}
ce pipeline échoue avec les journaux d'erreur suivants
Started by user admin
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 15: Not a valid stage section definition: "if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}". Some extra configuration is required. @ line 15, column 9.
stage('test3') {
^
WorkflowScript: 15: Nothing to execute within stage "test3" @ line 15, column 9.
stage('test3') {
^
Mais quand j'exécute l'exemple suivant à partir de cette URL , il s'exécute avec succès et affiche la partie else.
node {
stage('Example') {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
La seule différence que je peux voir est que, dans l'exemple de travail, il n'y a pas de stages
mais dans mon cas, c'est le cas.
Quel est le problème ici, quelqu'un peut-il suggérer s'il vous plaît?
votre premier essai utilise des pipelines déclaratifs, et le second fonctionne avec des pipelines scriptés. vous devez inclure les étapes dans une déclaration d'étapes et vous ne pouvez pas utiliser if
en tant qu'étape de niveau supérieur dans une déclaration, vous devez donc l'envelopper dans une étape script
. voici une version déclarative de travail:
pipeline {
agent any
stages {
stage('test') {
steps {
sh 'echo hello'
}
}
stage('test1') {
steps {
sh 'echo $TEST'
}
}
stage('test3') {
steps {
script {
if (env.BRANCH_NAME == 'master') {
echo 'I only execute on the master branch'
} else {
echo 'I execute elsewhere'
}
}
}
}
}
}
vous pouvez simplifier ceci et éventuellement éviter l’instruction if (tant que vous n’avez pas besoin de l’autre) en utilisant "when". Voir "when directive" à l'adresse https://jenkins.io/doc/book/pipeline/syntax/ . vous pouvez également valider les jenkinsfiles à l'aide de l'api jenkins rest. c'est super doux. amusez-vous avec les pipelines déclaratifs en jenkins!
Cela nécessite un peu de réorganisation, mais when
fait un bon travail pour remplacer les conditions ci-dessus. Voici l'exemple ci-dessus écrit en utilisant la syntaxe déclarative. Notez que test3
stage est maintenant composé de deux étapes différentes. Un qui fonctionne sur la branche principale et un qui fonctionne sur n'importe quoi d'autre.
stage ('Test 3: Master') {
when { branch 'master' }
steps {
echo 'I only execute on the master branch.'
}
}
stage ('Test 3: Dev') {
when { not { branch 'master' } }
steps {
echo 'I execute on non-master branches.'
}
}