jenkins - 如何访问groovy类文件中的全局变量?

标签 jenkins groovy global-variables jenkins-pipeline

我有以下目录结构

(root)
+- src                     # Groovy source files
|   +- org
|       +- foo
|           +- Bar.groovy  # for org.foo.Bar class
+- vars
|   +- foo.groovy          # for global 'foo' variable

我在以下文件中有以下代码行

  1. Bar.groovy

    package org.foo
    
    class Bar implements Serializable {
      def config
      def script
    
      Bar(script, config){
        this.script = script
        this.config = config
      }
    
      def accessGlobalVars(){
        this.script.echo "${foo.GlobalVar}" // throws an err
      }
    }
    
  2. foo.groovy

    import groovy.transform.Field
    @Field GlobalVar="Hello World!"
    

我能够访问脚本 block 内 Jenkinsfile 中的变量

echo "${foo.GlobalVar}"

由于 vars 文件夹位于 src 文件夹级别,是否可以在类内访问相同的变量?

最佳答案

示例代码中的 "${foo.GlobalVar}" 正在尝试根据 Bar 类型解析 foo 。由于没有 foo 引用,因此无法解析,您可能会得到类似 MissingPropertyException 的信息。

Jenkins Pipeline Groovy 使用 Groovy 编译和运行时 API 进行一些不同的编译和绑定(bind)。全局变量还可以通过 script 对象通过其动态 GroovyObject API 进行解析(在源代码 here 中进行了演示)。最简单的方法是让 Jenkins 实现的动态 Groovy 对象解析来解析您的变量。

更改您的线路:

this.script.echo "${foo.GlobalVar}"

script 对象中查找 foo (我假设是 thisscript在 Jenkins 管道中通过 new Foo(this, config)):

this.script.echo "${this.script.foo.GlobalVar}"

关于jenkins - 如何访问groovy类文件中的全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382345/

相关文章:

android - 在 jenkins 上构建时包 BuildConfig 不存在

unit-testing - ils。集成测试中提供了来自单元测试的模拟数据

groovy - 在 Jenkinsfile 中调用可变参数函数会意外失败

go - 调试时如何在 Visual Studio Code 中查看全局变量?

global-variables - Laravel 8 中的全局变量

c++ - 全局范围与文件范围

jenkins - 如果队列中已有作业,则在 Jenkins 中生成具有更高优先级的作业

使用 Jenkins 部署 Azure 函数

django - 如何在 Jenkins 多分支管道中添加环境变量

java - JClouds-Chef BootstrapConfig Builder MissingMethodException