Jenkins + Build Flow,如何将variables从一个工作传递给另一个工作

我有一个类似于文档示例的构buildstream程场景:两个作业,一个依次运行。

b = build("job1") build("job2", param1: b.????) 

我的job1是一个shell脚本,它从签出的git repositoy中构build一个包,并打印出构build包的版本。

我需要从job1提取版本(parsing输出??)并以某种方式将其作为参数提供给job2 。 这怎么能实现? 请注意,在运行job1之前,我无法知道该版本。

Solutions Collecting From Web of "Jenkins + Build Flow,如何将variables从一个工作传递给另一个工作"

在shell脚本构建步骤中简单地使用export的问题是,导出的变量在shell脚本退出时消失,它们不会传播到作业。

使用EnvInject插件在您的构建中创建环境变量。 如果你写出一个属性文件作为你的构建的一部分,EnvInject可以读取这个文件,并将其作为构建步骤注入 。 属性文件具有简单的KEY=VALUE格式:

 MY_BUILD_VERSION=some_parsed_value 

一旦在作业中设置了一个环境变量,在Build Flow插件中,可以提取变量的值并在随后的作业中使用它:

 def version = build.environment.get( "MY_BUILD_VERSION" ) out.println String.format("Parameters: version: %s", version) build( "My Second Build", MY_BUILD_VERSION: version ) 

运行job1导出名称为系统属性的版本。

 export appVersion="stringOfVersion-123" 

那么这取决于你知道版本有多长(数字或其他字符数)。 如果你知道它,你可以从第二个版本的结尾解析变量作为新变量并使用它。

如何解析字符串,你可以在这个问题中找到很好的例子 。

如果job2总是从job1得到一些信息,你可以使用没有参数的方法。 job1可以使用版本发布工件,job2将使用该工件(例如Copy Artifact Plugin )。 有了这个方法,job2也可以作为独立的工作来执行。

对于其他任何人来说,另一个解决方案是使用一个脚本程序脚本,在那里你传递.properties文件路径,脚本将添加属性到作业变量列表:

 Properties properties = new Properties() FilePath workspace = build.getWorkspace() FilePath sourceFile = workspace.child(path) properties.load(sourceFile.read()) properties.each { key, value -> key = key.replace(".", "_").toUpperCase() Job.setVariable(build, key, value) println "Created Variable: " + key + "=" + value } 

这会将任何句点转换为下划线,并将所有字母大写。 使用脚本程序脚本确保您有一个独立于您所使用的“插件汤”的方法。