web-dev-qa-db-fra.com

Puis-je vérifier si la variable d'environnement existe ou non dans Jenkinsfile

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?

25
kishs1991

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 ou env.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.

44
aristotll

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 } }
16
friederbluemle