在Groovy中访问Jenkins全局属性

5

此时,在管理Jenkins->配置系统->全局属性下,我定义了一个名为GLOBAL_VAR的环境变量,并将其值设置为“test”。当项目被构建时,我有一个包含以下内容的shell脚本:

echo "The value of the global variable is ${GLOBAL_VAR}"

如果执行成功,结果就是我所期望的:
The value of the global variable is test

现在我的问题是,我想在一个Groovy脚本中访问这个变量,该脚本用于创建Jenkins参数化构建属性中的下拉菜单。这个下拉菜单包含了在执行构建时也会使用的值的选项。因此,应该在某人单击"带参数构建"之前在Jenkins中创建这些下拉项,例如在任何构建开始之前
我不想每次更改这些值时都更改shell脚本代码和下拉Groovy脚本。此外,我想在不同的构建作业中使用相同的值,这意味着每次需要更改变量时都需要更改它们。
创建下拉菜单的Dynamic Choice Parameter只包含以下Groovy表达式来生成选项:
 def list = ["Option 1", "Option 2", "Option 3", "Option 4"]

我希望将我的GLOBAL_VAR的值添加到这个列表中。

有人知道如何在Groovy中访问Jenkins环境变量吗?或者有人知道管理变量的不同方法,我想在构建时既使用动态选择参数(下拉菜单)中使用,也在执行shell脚本中使用。

4个回答

5

这里是一段工作代码的示例:

import jenkins.model.*
nodes = Jenkins.instance.globalNodeProperties
nodes.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
envVars = nodes[0].envVars
envVars['MY_GLOBAL_PROPERTY']

我的解决方案来源:

https://gist.github.com/johnyzed/2af71090419af2b20c5a

http://pghalliday.com/jenkins/groovy/sonar/chef/configuration/management/2014/09/21/some-useful-jenkins-groovy-scripts.html

致删除我之前回答的“铁杆”版主:在找到正确的解决方案之前,我花了很多时间在互联网上搜索,您不应该在不知道实际情况的情况下删除帖子。我认为这种行为相当令人沮丧 :(


完美地工作了。它应该成为被接受的答案,以帮助像我这样的人在未来。 - user1470220
对我来说也完美地解决了问题。谢谢!+1,因为这是一个被接受的答案。 - Pawel Kruszewski

2

在“执行Groovy脚本”中,您可以通过以下方式访问全局(和构建)变量:

def env = System.getenv()
println(env['GLOBAL_VAR'])

当我打开“带参数构建”页面时,用于创建下拉列表的脚本在Jenkins中执行。我猜这可能是问题所在,因为按照您的建议操作时,我得到了一个空变量。tmplist << env['GLOBAL_STRING_BACKUP'] - Koningh

2

您可以使用:

import jenkins.model.*
instance = Jenkins.getInstance()
globalNodeProperties = instance.getGlobalNodeProperties()
envVarsNodePropertyList = globalNodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)

newEnvVarsNodeProperty = null
envVars = null

if ( envVarsNodePropertyList == null || envVarsNodePropertyList.size() == 0 ) {
  newEnvVarsNodeProperty = new hudson.slaves.EnvironmentVariablesNodeProperty();
  globalNodeProperties.add(newEnvVarsNodeProperty)
  envVars = newEnvVarsNodeProperty.getEnvVars()
} else {
  envVars = envVarsNodePropertyList.get(0).getEnvVars()

}

envVars.put("FOO", "foo")
instance.save()

解决方案在这里找到。


0
有人知道如何在Groovy中访问Jenkins环境变量吗?我可以提供我们使用的一个Jenkins作业的示例。该作业是“参数化”的,为用户提供设置许多值的能力,其中之一是“InstallVersion”(默认值为-1)。此外,我们设置了一个名为“JENKINS_TRUNK_LABEL”的环境变量。我不会详细介绍这个作业,但是以下是我们在Groovy脚本中引用“JENKINS_TRUNK_LABEL”的方法。
if (InstallVersion == "-1")
{
  InstallVersion = "$JENKINS_TRUNK_LABEL"
}

一旦我在我的Groovy脚本中添加test =“$GLOBAL_VAR”,它就停止工作了。我为了提供更多信息,已经在我的问题中添加了一些细节。 - Koningh
你是否有关于如何设置JENKINS_TRUNK_LABEL变量的额外信息?Groovy脚本中可能导入的插件或可能使用的插件是什么? - Koningh
能够以那种方式使用环境变量是由于Groovy插件的类型。我们目前安装了三个,但我相信正在使用的是Groovy标签分配插件。我的理解是环境变量访问机制取决于您想要访问它的上下文,例如预构建、后构建等。这就是为什么我们使用三个不同的插件的原因。 - rrirower
我同意问题确实与您想要访问变量的时刻有关。在您的情况下,您是在构建之前访问它们的,但是在用户单击构建按钮之后,或者我错了吗?我需要脚本在用户单击“使用参数构建”之后但在呈现页面之前运行;此时必须加载参数选项。 - Koningh

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