Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 詹金斯&x2B;构建流程,如何将变量从一个作业传递到另一个作业_Linux_Jenkins_Jenkins Plugins - Fatal编程技术网

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.????)
My
job1
是一个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()
工作正常。谢谢