Jenkins 我可以检查文件中是否存在环境变量吗

Jenkins 我可以检查文件中是否存在环境变量吗,jenkins,groovy,jenkins-pipeline,multibranch-pipeline,Jenkins,Groovy,Jenkins Pipeline,Multibranch Pipeline,我正在为我的项目运行多分支管道 Jenkinsfile的行为应该根据触发器而改变。 有两个事件触发管道1。推送事件2。拉请求 我正在尝试检查环境变量“CHANGE\u ID”(“CHANGE\u ID”仅可用于请求请求请求) 所以,如果管道是由Push事件触发的,并且如果检查'CHANGE_ID'变量,它会抛出异常(如果管道是由Pull请求触发的,代码工作正常) 代码: stage('groovyTest'){ node('mynode1') { if (CHANGE_I

我正在为我的项目运行多分支管道

Jenkinsfile的行为应该根据触发器而改变。 有两个事件触发管道1。推送事件2。拉请求

我正在尝试检查环境变量“CHANGE\u ID”(“CHANGE\u ID”仅可用于请求请求请求)

所以,如果管道是由Push事件触发的,并且如果检查'CHANGE_ID'变量,它会抛出异常(如果管道是由Pull请求触发的,代码工作正常)

代码:

stage('groovyTest'){
    node('mynode1') {
        if (CHANGE_ID!=NULL){
            echo "This is Pull request"
        }else{
            echo "This is Push request"
        }
    }
}
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)
错误:

stage('groovyTest'){
    node('mynode1') {
        if (CHANGE_ID!=NULL){
            echo "This is Pull request"
        }else{
            echo "This is Push request"
        }
    }
}
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)

如何检查Jenkins文件中是否存在“CHANGE\u ID”变量?

您可以在使用前检查它:

 if (env.CHANGE_ID) {
 ...

可从脚本化管道访问的环境变量,例如:
env.PATH
env.BUILD\u ID
。请参阅内置的,以获得管道中可用的完整且最新的环境变量列表


这就是声明性管道的外观:

pipeline {
    // ...
    stages {
        // ...
        stage('Build') {
            when {
                allOf {
                    expression { env.CHANGE_ID != null }
                    expression { env.CHANGE_TARGET != null }
                }
            }
            steps {
                echo "Building PR #${env.CHANGE_ID}"
            }
        }
    }
}
要仅在未建立PR时运行阶段,请执行以下操作:

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

您还可以使用when子句中的
changeRequest()
函数检查PR:

when {
   anyOf {
      changeRequest()    // if pull request
      branch 'master'
      branch 'release/*'
   }
}

@很高兴这有帮助,你可以接受我的回答(*≧∪≦)如果不工作,可以使用脚本标记:“script{If(env.CHANGE_ID){”为了完整性,
env.dos_not_存在的值是
null
我还有一个问题,如果我们有10个或更多的变量要检查,并且所有变量都是从同一个单词开始命名的(BUILD_ID、BUILD_NUMBER、BUILD_DATE,…)。可以使用以下句子吗?:if(env.BUILD_*){…是的,谢谢!使用
changeRequest
并不总是达到我的预期效果。使用env vars是我所需要的。