webentwicklung-frage-antwort-db.com.de

Kann ich überprüfen, ob Umgebungsvariable in Jenkinsfile vorhanden ist oder nicht?

Ich verwende eine Multibranch-Pipeline für mein Projekt.

Das Verhalten von Jenkinsfile sollte sich je nach Auslöser ändern. Es gibt zwei Ereignisse, die die Pipeline auslösen: 1. Push-Ereignis 2. Pull-Anforderung.

Ich versuche, die Umgebungsvariable 'CHANGE_ID' zu überprüfen ('CHANGE_ID' ist nur für Pull Request verfügbar). . Referenz .

Wenn also die Pipeline durch ein Push-Ereignis ausgelöst wird und die Variable 'CHANGE_ID' markiert ist, wird eine Ausnahme ausgelöst (der Code funktioniert einwandfrei, wenn die Pipeline durch eine Pull-Anforderung ausgelöst wird).

Code:

stage('groovyTest'){
    node('mynode1') {
        if (CHANGE_ID!=NULL){
            echo "This is Pull request"
        }else{
            echo "This is Push request"
        }
    }
}

Fehler:

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)

Wie kann ich überprüfen, ob die Variable 'CHANGE_ID' in Jenkinsfile vorhanden ist oder nicht?

25
kishs1991

Sie können es überprüfen, bevor Sie es verwenden:

 if (env.CHANGE_ID) {
 ...

Aus dem doc

Umgebungsvariablen, auf die über die Skript-Pipeline zugegriffen werden kann, zum Beispiel: env.PATH oder env.BUILD_ID. Eine vollständige und aktuelle Liste der in Pipeline verfügbaren Umgebungsvariablen finden Sie in der integrierten Globale Variablenreferenz .

44
aristotll

So würde es für eine deklarative Pipeline aussehen :

pipeline {
    // ...
    stages {
        // ...
        stage('Build') {
            when {
                allOf {
                    expression { env.CHANGE_ID != null }
                    expression { env.CHANGE_TARGET != null }
                }
            }
            steps {
                echo "Building PR #${env.CHANGE_ID}"
            }
        }
    }
}

So führen Sie eine Bühne nur aus, wenn kein PR erstellt wird :

when { expression { env.CHANGE_ID == null } }
16
friederbluemle