Linux 詹金斯&x2B;构建流程,如何将变量从一个作业传递到另一个作业
我有一个类似的构建流场景:两个作业,一个接一个地运行Linux 詹金斯&x2B;构建流程,如何将变量从一个作业传递到另一个作业,linux,jenkins,jenkins-plugins,Linux,Jenkins,Jenkins Plugins,我有一个类似的构建流场景:两个作业,一个接一个地运行 b = build("job1") build("job2", param1: b.????) Myjob1是一个shell脚本,它用签出的git repositoy构建一个包,并打印出构建包的版本 我需要从job1(解析输出??)中提取版本,并以某种方式将其作为job2的参数提供。如何做到这一点?请注意,在运行job1时,在运行job1之前,我无法知道版本。请将名称导出为系统属性 export appVersion="stringOfVe
b = build("job1")
build("job2", param1: b.????)
Myjob1
是一个shell脚本,它用签出的git repositoy构建一个包,并打印出构建包的版本
我需要从
job1
(解析输出??)中提取版本,并以某种方式将其作为job2
的参数提供。如何做到这一点?请注意,在运行job1
时,在运行job1之前,我无法知道版本。请将名称导出为系统属性
export appVersion="stringOfVersion-123"
然后取决于您是否知道版本的长度(数字或其他字符的计数)。若您知道它,您可以在第二次构建中将变量作为新变量从末尾解析并使用它
如何在中解析字符串。在shell脚本构建步骤中简单使用export
的问题是,导出的变量在shell脚本退出时消失,它们不会传播到作业中
使用在生成中创建环境变量。如果你
编写一个属性文件作为构建的一部分,EnvInject可以读取该文件并进行修改。属性文件具有简单的KEY=VALUE
格式:
MY_BUILD_VERSION=some_parsed_value
在作业中设置环境变量后,在构建流中
插件,您可以提取变量的值并在后续作业中使用:
def version = build.environment.get( "MY_BUILD_VERSION" )
out.println String.format("Parameters: version: %s", version)
build( "My Second Build", MY_BUILD_VERSION: version )
若job2总是从job1获得一些信息,那个么您可以使用不带参数的方法。job1可以发布版本为的工件,job2将使用该工件(例如)。使用这种方法,job2也可以作为独立作业执行。对于遇到此问题的任何其他人,另一种解决方案是使用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
}
这会将任何句点转换为下划线,并将所有字母大写。使用scriptler脚本可以确保您有一个独立于您正在使用的“插件汤”的工作方法。您有一些实际工作的例子吗?因为在我的测试中,似乎不是这样;从一个工作到另一个工作,环境并没有得到保护。事实上,我们只是偶尔使用詹金斯。但若您以build1的形式运行一些Bash脚本,那个么您可以将变量导出为系统变量,并在第二个构建中使用这个变量。或者你可以粘贴更多关于这个问题的信息(Jenkins,code,…)来提问吗?如果你使用grep
,那么你会得到“version=1.3.4”(例如,如果你使用export version=“1.2.3”
),但是当你在命令中使用$version
(对于打印使用echo$version
)时,你只会得到一个数字。用$
语句试试。grep的目的是在job2
的环境中显示“VERSION
”的存在,并证明它不存在。不幸的是,你说的没有用。这对你有用吗?我正在创建一个vars.txt
properties文件(包含MY_BUILD\u VERSION=something
),并将“注入变量”作为下一个构建步骤,作为job1
的一部分。但是由于某种原因,在buildflow中,在触发了job1
(使用您的示例作为代码)之后,版本显示为null
。我在做b=build('job-1')
并尝试build.environment.get()
b.environment.get()
工作正常。谢谢