我有一个类似于文档示例的构建流程场景:两个工作,一个在另一个之后运行。
b = build("job1")
build("job2", param1: b.????)
我的
job1
是一个shell脚本,它从已检出的git存储库构建一个包,并打印出构建包的版本。我需要从job1
中提取版本(解析输出??),并将其作为参数传递给job2
。如何实现这一点?请注意,运行job1
之前我无法知道版本。我有一个类似于文档示例的构建流程场景:两个工作,一个在另一个之后运行。
b = build("job1")
build("job2", param1: b.????)
job1
是一个shell脚本,它从已检出的git存储库构建一个包,并打印出构建包的版本。我需要从job1
中提取版本(解析输出??),并将其作为参数传递给job2
。如何实现这一点?请注意,运行job1
之前我无法知道版本。export
的问题在于,当shell脚本退出时,导出的变量会消失,它们不会向上传播到作业。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 )
对于其他遇到此问题的人,另一个解决方案是使用Scriptler脚本,您可以传入.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
}
这将把任何句点转换为下划线,并将所有字母大写。使用脚本程序可以确保您拥有一种独立于您正在使用的“插件汤”的方法。
当你运行job1
时,将版本名称作为系统属性导出。
export appVersion="stringOfVersion-123"
那就取决于你是否知道版本号的长度(数字或其他字符的数量)。如果你知道,你可以在第二个构建中从末尾解析变量作为新变量并使用它。
如何解析字符串,你可以在这个带有很好例子的问题中找到。
grep
,则会得到“version=1.3.4”(例如,如果您执行export version="1.2.3"
),但是当您在命令中使用$version
(用于打印请使用echo $version
)时,您只会得到数字。尝试使用$
语句。 - zorbon.czjob2
环境中 "VERSION
" 的存在并证明它不存在。不幸的是,你所说的并没有起作用。 - Unknown
vars.txt
的属性文件(包含MY_BUILD_VERSION=something
),并将“注入变量”作为job1
的下一构建步骤之一。但是由于某种原因,在触发job1
后,版本在buildflow中变为null
(使用您的示例作为代码)。 - Unknownb = build('job-1')
然后尝试使用build.environment.get()
;实际上应该使用b.environment.get()
才能正常工作。谢谢! - Unknown