【问题标题】:How to retrieve Jenkins environment from Groovy script?如何从 Groovy 脚本中检索 Jenkins 环境?
【发布时间】:2021-09-28 16:11:46
【问题描述】:

我正在设置 Jenkins。我正在使用 Global Pipeline Libraries 对我的管道进行编程,以提高可重用性。脚本是面向对象的并且在 Groovy 中。可以在there找到有关概念的信息

我无法使用我的库脚本检索 Jenkins 特定环境。例如,我想访问:

  • Build_ID
  • Build_Number
  • JOB_Name
  • 工作区路径

我尝试使用 env.WORKSPACE 但它返回 NULL。我设法直接在管道中检索它,但这不是我的目标。

我正在使用 Jenkins 2.303.1。

【问题讨论】:

标签: jenkins groovy


【解决方案1】:

根据您编写脚本的方式,您可能需要注入 Jenkins 环境。例如,如果您选择更面向对象的方式

// vars/whatever.groovy
import ...

@Field
def myTool = new MyTool(this)
// src/.../MyTool.groovy
import ...

class MyTool {
    private final jenkins

    MyTool(steps) {
        this.jenkins = jenkins
    }

    def echoBuildNumber() {
        this.jenkins.echo(this.jenkins.env.BUILD_NUMBER)
    }
}
// Jenkinsfile
@Library(...)
node {
    echo env.BUILD_NUMBER             // echoes build number
    whatever.myTool.echoBuildNumber() // echoes build number
}

【讨论】:

  • 我运行 1 对 1 这个脚本,我得到了这个结果:groovy.lang.MissingPropertyException: No such property: myTool for class: groovy.lang.Binding
  • @Field 有什么作用?
  • 确保您正确导入了共享库。您可以在docs.groovy-lang.org/latest/html/gapi/groovy/transform/… 找到@Field 的文档
【解决方案2】:

因此,您可以在 groovy 脚本中使用这样的方式访问您正在寻找的环境

${env.BUILD_NUMBER} ${env.JOB_NAME} ${env.WORKSPACE} ${env.BUILD_ID}

【讨论】:

  • 这在共享库中不起作用
猜你喜欢
  • 1970-01-01
  • 2020-05-03
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 2017-11-23
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多