【问题标题】:Retrieving Jenkins node variables from master从 master 检索 Jenkins 节点变量
【发布时间】:2015-03-20 04:00:34
【问题描述】:

所以我的 google-fu 让我失望了,Jenkins O'Reilly 的书也没有帮助。

我有一个带有主节点和 20 多个节点的 Jenkins 设置。我在节点上大量使用自定义环境变量,因为它们中的许多执行类似的任务,只是平台略有不同。

我现在的位置是,我有一个在主节点上运行的作业(必要时),它需要知道任何给定节点的某些节点属性,包括我设置的一些环境变量。

有没有办法引用这些?我的替代方法似乎是在 master 中有数百个环境变量,形式为 node1_var1、node2_var1、node1_var2、node2_var2 等,这看起来很乱。主人显然知道变量,因为这是为它们完成配置的地方,但我只是找不到在工作中指定它们的方法。

非常感谢任何帮助(或嘲笑和指出明显的答案)......

【问题讨论】:

    标签: jenkins environment-variables slave


    【解决方案1】:

    这是一个简单的 Groovy 脚本,用于打印每个从属设备的环境变量列表:

    for (slave in jenkins.model.Jenkins.instance.slaves) {
      println(slave.name + ": ")
      def props = slave.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)
      for (prop in props) {
        for (envvar in prop.envVars) {
          println envvar.key + " -> " + envvar.value
        }
      }
    }
    

    警告:我不是经验丰富的 Groovy 程序员,所以我可能没有使用适当的 Groovy 习惯用法。

    您可以从Jenkins script console 运行它以进行实验。您还可以运行“系统 Groovy 脚本”作为构建步骤。以上两个都需要Groovy plugin。如果您在工作中不使用 Groovy,则可以使用此脚本编写一个属性文件,将其加载到执行实际工作的构建部分中。

    【讨论】:

    • 谢谢。最后我使用了一个稍微不同的解决方案,但 groovy 似乎是正确的方向。我使用 EnvInject 和以下脚本:` import jenkins.model.* myEnvVars = jenkins.model.Jenkins.instance.getNode( "node1").getNodeProperties() [0].getEnvVars() def map = [ "nodeVar1" : myEnvVars.get( "nodeVar1" ) , "nodeVar2" : myEnvVars.get( "nodeVar2" ) ] ;返回地图;`
    • @Tony,关于您的代码的一个注释,在我的带有各种插件和从属配置的实例中,nodeProperties[0] 并不总是包含节点的环境变量——因此 getAll 调用与 env var类。
    猜你喜欢
    • 2014-04-14
    • 2015-06-26
    • 2017-05-06
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多