【问题标题】:Getting post build environment variables in jenkins在詹金斯中获取构建后环境变量
【发布时间】:2014-11-11 11:00:43
【问题描述】:

在尝试向我的插件添加新功能时,我遇到了以下问题。 目标是获取在构建期间被覆盖的环境变量的更改。
例如:从 shell 脚本获取新值的字符串变量 (param1)。
所以,我添加了以下代码:

@Extension
public class MyRunListener extends RunListener<Run>{

    @Override
    public Environment setUpEnvironment(AbstractBuild build, Launcher launcher, 
                     BuildListener listener) throws IOException, InterruptedException {
        return new Environment(){
            @Override
            public boolean tearDown(AbstractBuild build, BuildListener listener) 
                    throws IOException, InterruptedException {
                EnvVars envVars = build.getEnvironment(listener);
                String param1 = envVars.get("param1");
                return super.tearDown(build, listener);
            }
        };
    }

}

运行作业时:param1 = defaultValue。然后作业更改为:param1 = newValue.
在 tearDown(…) 方法中,我试图获取 param1 的新值,但我得到了更改之前的变量列表,其中 param1 = defaultValue 而不是被 shell 命令覆盖的新值,其中 param1 = newValue。
是否可以通过编程方式获取新值?我知道我可以写入属性文件然后读取它,但我正在寻找“幕后”解决方案。

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    在Java中,有一种获取环境变量当前值的方法是:

    System.getProperty("param1")
    

    【讨论】:

    • 谢谢Jeanne,但是当jenkins调用tearDown(...)时,进程已经关闭,属性为null。
    【解决方案2】:

    @Moosh,

    不,环境变量不能向上从您的 Java 代码上下文传递到 Jenkins 引擎。正如您所指出的,您必须将其写出到一个文件中,然后对其进行解析。

    幸运的是,它并不像您担心的那样相当混乱。无需创建单独的属性文件,只需将值写入 Jenkins 控制台日志,然后在运行结束时通过

    获取日志文本
    $ curl http://jenkins-host/job/job-name/number/consoleText
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-11-09
      • 2018-07-26
      • 2016-04-07
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多