J'utilise un pipeline multibranches pour mon projet.
Le comportement de Jenkinsfile devrait changer en fonction du déclencheur. Le pipeline est déclenché par deux événements: 1. événement Push 2. demande d'extraction.
J'essaie de vérifier la variable d'environnement 'CHANGE_ID' ('CHANGE_ID' sera disponible pour la demande d'extraction uniquement) . Référence .
Ainsi, si le pipeline est déclenché par un événement Push et si la case à cocher 'CHANGE_ID' est cochée, une exception est levée (le code fonctionne correctement si le pipeline est déclenché par une requête Pull).
Code:
stage('groovyTest'){
node('mynode1') {
if (CHANGE_ID!=NULL){
echo "This is Pull request"
}else{
echo "This is Push request"
}
}
}
Erreur:
groovy.lang.MissingPropertyException: No such property: CHANGE_ID for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.Java:63)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.Java:224)
at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.Java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.Java:238)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.Java:221)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.Java:221)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.Java:28)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.Java:20)
at WorkflowScript.run(WorkflowScript:5)
at ___cps.transform___(Native Method)
Comment puis-je vérifier si la variable 'CHANGE_ID' existe ou non dans Jenkinsfile?
Vous pouvez le vérifier avant de l'utiliser:
if (env.CHANGE_ID) {
...
Depuis le doc
Variables d'environnement accessibles à partir de Scripted Pipeline, par exemple:
env.PATH
ouenv.BUILD_ID
. Consultez la référence de variable globale intégrée pour obtenir une liste complète et à jour des variables d'environnement disponibles dans Pipeline.
Voici à quoi cela ressemblerait pour un pipeline déclaratif:
pipeline {
// ...
stages {
// ...
stage('Build') {
when {
allOf {
expression { env.CHANGE_ID != null }
expression { env.CHANGE_TARGET != null }
}
}
steps {
echo "Building PR #${env.CHANGE_ID}"
}
}
}
}
Pour exécuter une étape uniquement lorsque pas la création d'un PR:
when { expression { env.CHANGE_ID == null } }