【问题标题】:Jenkins Pipeline accessing environment variablesJenkins Pipeline 访问环境变量
【发布时间】:2016-07-26 20:50:07
【问题描述】:

我正在尝试在 Jenkins 中使用 DSL 管道。我认为如果我可以将项目名称用作我的脚本的一部分会很好。

git credentialsId: 'ffffffff-ffff-ffff-ffff-ffffffffffffff',\
url: "${repo_root}/${JOB_NAME}.git"

我得到错误:

groovy.lang.MissingPropertyException: \
No such property: JOB_NAME for class: groovy.lang.Binding

我以为我关注了these directions,他们提到JOB_NAME 作为变量之一。

我决定试试:

sh 'env'

在我的 DSL 中,打印出来:

JOB_NAME = foo-bar

这是我所期望的。

另一个blog mentions

环境变量的使用
我们有两种方法来获得它们的价值。在启动期间-D= 传递的属性我们可以读为System.getProperty("key"),这要归功于 Groovy 与 Java 的密切关系。

用Java方式读取普通环境变量是System.getenv("VARIABLE")...

让我们试试这个:

println "JOB_NAME = " + System.getenv('JOB_NAME'); 

现在,我明白了:

java.lang.NullPointerException: Cannot get property 'System' on null object

空对象?但是,我可以看到JOB_NAME 是一个环境变量!

如何将$JOB_NAME 读入管道作业中的 DSL 脚本。我正在尝试一个 Pipeline 工作,当我开始工作时,它将使它成为一个带有 Jenkinsfile 的 Multibranch Pipeline。

【问题讨论】:

    标签: jenkins jenkins-workflow jenkins-pipeline


    【解决方案1】:

    所有环境变量都可以使用env 访问,例如${env.JOB_NAME}.

    【讨论】:

    • 那行得通。 JOB_NAME 被提及为假设已定义的特殊 Jenkins 变量。
    【解决方案2】:

    确实只需使用${env.JOB_NAME} 来访问已知变量。

    但是,如果您需要访问名称由另一个变量指定的环境变量(动态访问),只需使用env["your-env-variable"]

    我在配置 3 个环境变量时遇到了问题(在 Jenkins -> Administer -> Configure System -> Environment variables 中),我们将它们命名为 ENV_VAR_1ENV_VAR_2ENV_VAR_3。 现在我想动态访问它们,我可以这样做:

    def envVarName = "ENV_VAR_" + count  // Suppose count is initialized in a loop somewhere above...
    
    def value = env[envVarName]  // Will be resolved to env["ENV_VAR_1"] depending on count value
    

    我在 Jenkins 配置中的环境变量如下所示:

    【讨论】:

    • 这个不行,只是测试了一下。请提供更多详细信息@Pom12。
    • 我目前已成功地将它用于系统定义的环境变量,正如我在编辑后的帖子中所示。你用的是什么版本的 Jenkins?
    • 它还允许直接使用env[var]设置变量。
    • 我可以确认这适用于 Jenkins 版本。 2.46.1。 Jenkins > 管理 Jenkins > 配置系统 > 全局属性 > 环境变量。 name=COMMON_AUTOMATION_GIT_REPO value=c:/jenkins_local/shared_workspace/CommonAutomationGitRepo 然后在我的 groovy 管道脚本中:` def commonRepo = env["COMMON_AUTOMATION_GIT_REPO"];` echo "Using common repo: ${commonRepo}"` 导致输出:[Pipeline] echo Using common repo: c:/jenkins_local/shared_workspace/CommonAutomationGitRepo
    • 这对我有用env["$variable"]
    【解决方案3】:

    好吧,今天这真的让我很烦恼。最终,我被几件事完成了:

    • Groovy 中的单引号字符串表示“不计算变量”,就像在 bash 中一样
    • 如果您只是引用变量,则完全不需要使用 $ 插值,因此您可以使用 env.JOB_NAME

    这个 SO 问题被证明是帮助我破解密码的问题:Jenkins Workflow Checkout Accessing BRANCH_NAME and GIT_COMMIT

    【讨论】:

      【解决方案4】:

      我遇到了这个不工作的问题。全局设置的属性/环境变量仅在 node 步骤中可用。这是 Pipeline 插件 2.4 版中的一个错误。如果您遇到此问题,请升级到 2.5,您的全局属性将在脚本中的任何位置可用。我已经使用我使用的测试脚本将其发布到 Jenkins wiki here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2021-04-26
        • 2021-07-27
        • 1970-01-01
        • 2017-01-03
        • 1970-01-01
        相关资源
        最近更新 更多