在Groovy中访问Jenkins全局属性

在Groovy中访问Jenkins全局属性,groovy,jenkins,global-variables,Groovy,Jenkins,Global Variables,此时,我在managejenkins->configuresystem->globalproperties下定义了一个名为GLOBAL_VAR的环境变量,其值为“test”。我有一个shell脚本,当一个项目正在生成时包含 echo "The value of the global variable is ${GLOBAL_VAR}" 如果执行,结果就是我所期望的: The value of the global variable is test 现在我的问题是,我想在Groovy脚本中访问

此时,我在managejenkins->configuresystem->globalproperties下定义了一个名为GLOBAL_VAR的环境变量,其值为“test”。我有一个shell脚本,当一个项目正在生成时包含

echo "The value of the global variable is ${GLOBAL_VAR}"
如果执行,结果就是我所期望的:

The value of the global variable is test
现在我的问题是,我想在Groovy脚本中访问这个变量,该脚本用于在Jenkins的参数化构建属性中创建下拉菜单。此下拉菜单包含在执行生成时执行的shell脚本中也使用的值。因此,应该在有人单击Jenkins本身中的“使用参数构建”时创建下拉项,例如,在任何构建开始之前

我不想每次更改这些值时都更改shell脚本代码和下拉Groovy脚本。此外,我希望在不同的构建作业中使用相同的值,这意味着每次需要更改变量时都需要更改它们

创建下拉菜单的Dynamic Choice参数仅包含以下生成选项的Groovy表达式:

 def list = ["Option 1", "Option 2", "Option 3", "Option 4"]
我想把全局变量的值添加到这个列表中

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

是否有人知道如何访问中的Jenkins环境变量 棒极了

我可以举一个我们使用的詹金斯工作的例子。作业是参数化的,用户可以设置多个值,其中一个是“InstallVersion”(默认值为-1)。此外,我们还设置了一个名为“JENKINS_TRUNK_LABEL”的环境变量。我不会详细介绍这项工作,但下面是如何在Groovy脚本中引用“JENKINS_TRUNK_标签”

if (InstallVersion == "-1")
{
  InstallVersion = "$JENKINS_TRUNK_LABEL"
}
在“执行Groovy脚本”中,您可以通过以下方式访问全局(和构建)变量:

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

下面是一些工作代码的示例:

import jenkins.model.*
nodes = Jenkins.instance.globalNodeProperties
nodes.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
envVars = nodes[0].envVars
envVars['MY_GLOBAL_PROPERTY']
我的解决方案的来源:

“铁杆”版主删除了我之前的答案:在找到正确的解决方案之前,我花了好几个小时在互联网上搜索,你不应该在不知道它真正在说什么的情况下删除帖子。我觉得这样的行为相当令人沮丧:(

你可以使用:

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()

只要我添加test=“$GLOBAL\u VAR”,就找到了解决方案对于我的Groovy脚本,它停止工作。我在问题中添加了一些细节以获取更多信息。关于如何设置JENKINS_TRUNK_标签变量、Groovy脚本中可能的导入和/或可能使用的插件,您是否有其他信息?以这种方式使用环境变量的能力取决于Groovy插件。我们目前安装了三个,但我相信使用的是Groovy标签分配插件。我的理解是,环境变量访问机制取决于您希望访问它的时间上下文。例如,预构建、后构建等。这就是为什么我们使用三个不同的插件。I agr请注意,问题确实与您希望访问变量的时刻有关。在您的情况下,您可以访问它们预构建,但是在用户单击“构建”按钮之后,还是我错了?我需要在用户单击“使用参数构建”之后但在它们显示到页面之前运行脚本;在此之前必须加载参数选项。帮助创建下拉列表的脚本在Jenk中执行当我打开“使用参数构建”页面时,它会自动插入。我想这可能是问题所在,因为在执行您的建议时,我得到了一个空变量。
tmplist工作得很好。这应该是一个公认的答案,可以帮助像我这样的人。对我来说也很好。谢谢!+1这是一个公认的答案。