首页 文章

访问Groovy中的Jenkins全局属性

提问于
浏览
3

此时我在Manage Jenkins - > Configure System - > Global Properties下定义了一个名为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本身点击"Build with Parameters"时,应该创建下拉项目,例如 before any build is started .

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

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

def list = ["Option 1", "Option 2", "Option 3", "Option 4"]

我想将GLOBAL_VAR的值添加到此列表中 .

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

4 回答

  • 1

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

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

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

    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

    请注意删除我以前的答案的“硬核”主持人:在找到正确的解决方案之前,我花了几个小时在互联网上搜索,你不应该删除帖子而不知道它真正在谈论什么 . 我发现这种行为相当令人沮丧:(

  • 0

    有谁知道如何在groovy中访问Jenkins环境变量?

    我可以提供一个我们使用的Jenkins工作的例子 . 作业是 parameterized ,并为用户提供了设置许多值的功能,其中一个值是"InstallVersion"(默认值为-1) . 另外,我们设置了一个名为"JENKINS_TRUNK_LABEL"的环境变量 . 我赢了't go into specifics about this job, but, here' s我们如何在Groovy脚本中引用"JENKINS_TRUNK_LABEL" .

    if (InstallVersion == "-1")
    {
      InstallVersion = "$JENKINS_TRUNK_LABEL"
    }
    
  • 0

    您可以使用:

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

    解决方案被发现here

相关问题