当前位置: 首页 > 知识库问答 >
问题:

我可以检查环境变量在Jenkinsfile中是否存在吗

曾嘉言
2023-03-14

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

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

我试图检查环境变量'CHANGE_ID'('CHANGE_ID'将只适用于拉请求)。参考。

因此,如果pipeline由Push事件触发,并且如果检查“CHANGE_ID”变量,它会抛出异常(如果pipeline由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)

如何检查 Jenkinsfile 中是否存在 “CHANGE_ID” 变量?

共有3个答案

司徒炎彬
2023-03-14

还可以在when子句中使用< code>changeRequest()函数来检查PR:

when {
   anyOf {
      changeRequest()    // if pull request
      branch 'master'
      branch 'release/*'
   }
}
荆乐
2023-03-14

这是声明性管道的样子:

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 } }
申宜
2023-03-14

您可以在使用前检查:

 if (env.CHANGE_ID) {
 ...

从医生那里

可从脚本化管道访问的环境变量,例如:env.PATHenv.BUILD_ID。请参阅内置的全局变量参考,以获取管道中可用环境变量的完整且最新的列表。

 类似资料:
  • 我有一个Typescript项目,我需要知道变量的值是否在对象的任何属性中。 这就是目标: 这是声明的变量: 以下是我检查它是否存在的步骤: 问题:做三次检查会在其他机器上运行三次 我需要知道的是,如何检查它是否存在,而不需要迭代对象,如果它不存在,只需操作一次

  • 问题内容: 我想检查一个变量是否存在。现在我正在做这样的事情: 是否有其他方法无一例外? 问题答案: 要检查是否存在局部变量: 要检查是否存在全局变量: 要检查对象是否具有属性:

  • 问题内容: 所以我的Dockerfile是这样写的: 但是我想用 这样,我只需要在文件的一个位置写入用户名即可。但这是行不通的。 我该如何解决? 谢谢。 问题答案: 使用指令。根据文档: ARG指令定义了一个变量,用户可以在构建时使用docker build命令使用该标志,将其传递给构建器。如果用户指定了未在Dockerfile中定义的构建参数,则构建会输出警告。 因此,您实际上可以像这样使用:

  • 问题内容: 我有一个Freemarker模板,其中包含一堆占位符,在处理模板时会为其提供值。如果要提供userName变量,我想有条件地包括模板的一部分,例如: 但是,FreeMarker手册似乎表明if_exists已过时,但是我找不到其他方法来实现这一目标。当然,我可以简单地提供一个额外的布尔变量isUserName,并像这样使用它: 但是,如果有一种方法可以检查userName是否存在,那么

  • 问题内容: 我试图用bash编写脚本来检查用户输入的有效性。 我想将输入(例如变量)与有效值列表进行匹配。 我目前想出的是: 我的问题是,是否有更简单的方法可以做到这一点, 就像大多数编程语言一样。 另外: 说的清单是: 我的代码将仅针对那些值回显该消息,因为将其视为数组而不是字符串,所有字符串操作都将验证,而我希望它失败。 问题答案: 或创建一个函数: 使用它:

  • 本文向大家介绍请你说明是否可以在static环境中访问非static变量?相关面试题,主要包含被问及请你说明是否可以在static环境中访问非static变量?时的应答技巧和注意事项,需要的朋友参考一下 考察点:static变量 static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非st