Jenkins Pipeline 访问环境变量

38

我正在尝试在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

我以为我已经按照这些指示来操作了,而且他们提到JOB_NAME是其中一个变量。

我决定尝试:

sh 'env'

在我的DSL中,这会打印出:

JOB_NAME = foo-bar

这就是我期望的。

另一篇博客文章提到:

环境变量的使用
我们有两种方法来获取它们的值。通过启动时传递的-D=属性,我们可以像使用Java一样读取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作业中。我正在尝试Pipeline作业,当我让它工作后,将使其成为具有Jenkinsfile的多分支Pipeline。

4个回答

74

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


可以的。JOB_NAME 被提及为一个特殊的 Jenkins 变量,应该已经被定义好了。 - David W.

15

今天有一件事情让我困扰了很久。最终,有几点导致了我的困扰:

  • Groovy中的单引号字符串意味着“不要评估变量”,就像在bash中一样
  • 如果您只引用变量,则完全不需要使用$插值,因此您可以直接使用env.JOB_NAME

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


6

如果您想要访问一个已知的变量,只需要使用${env.JOB_NAME}

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

我曾经遇到过这样的问题:我在Jenkins -> 管理 -> 系统配置 -> 环境变量中配置了三个环境变量,它们的名字分别是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配置中环境变量看起来像这样:

enter image description here


2
这个不起作用,我刚测试过了。请提供更多细节 @Pom12。 - de.la.ru
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Pom12
1
它还允许使用 env[var] 直接设置变量。 - Leon S.
我可以确认这个在 Jenkins ver. 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 - Spangen
这对我有用 env["$variable"] - Skillz

1
我曾遇到过这个问题,但它没有起作用。全局设置的属性/环境变量只在node步骤内可用。这是Pipeline插件2.4版本中的一个错误。如果您面临此问题,并且您的全局属性将在脚本的任何地方都可用,请升级到2.5版本。我已经将这个问题发布到Jenkins维基这里,并附上了我使用的测试脚本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接