如何在Jenkins Pipeline构建中持久化环境?

3

我需要将一些构建信息持久化到其环境变量中,就像在POFP(普通老式自由样式项目)中使用EnvInject动作之前所做的那样。

目的是能够在其他作业中读取它们。

我以为在Jenkins Pipeline中,这个功能已经内置了。

比如说,我有这段Pipeline代码:

AAA = '123'
env.BBB = '123'
def CCC = '123'

node('local_devkit'){
    DDD = '123'
    env.EEE = '123'
}

我运行了这个任务并得到了一个构建。然后从Jenkins Groovy控制台中,我尝试访问它的环境:

b = Jenkins.instance.getItem('test').getBuildByNumber(1)
println b.environment
println b.envVars

我能看到一些自动变量,比如BUILD_NUMBER或JOB_URL。 问题是我想从我的示例中访问在作业运行时创建的自定义变量:AAA,BBB等。 即使使用添加新ParametersAction的技巧也无济于事,因为在Jenkins管道中访问参数方式不同。
pa = new ParametersAction([
    new StringParameterValue("QWERTY", 'AAAA')
])
currentBuild.rawBuild.addAction(pa)

我该如何实现所需的行为?
1个回答

1
你的变量已经被存储,虽然我认为无法通过你调用的API访问。可以通过build REST导出,或者在Java中通过EnvAction,或者在上游Pipeline构建中调用build步骤并使用.buildVariables进行访问。

1
感谢您的指导,我研究了Jenkins Pipeline代码,并最终创建了这个片段来打印整个构建环境,包括全局变量(它适用于工作流和常规构建):b = Jenkins.instance.getItem('test').getBuildByNumber(15); rw = new org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper(b, false); println rw.rawBuild.environment + rw.buildVariables。我能依赖这种方法吗?如果可以,我将用详细的答案更新问题。 - izzekil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接