我想按照以下方式做点什么:
这非常简单,只是展示了我想做的事情。基本上,我希望能够在多个构建步骤之间的单个作业范围内存储和访问变量。此外,我可以通过将数据存储到文件并稍后阅读来解决这个问题,但我想要更简单,更少的东西'
构建步骤#1 - 执行shell
$START=timestamp
构建步骤#2 - 运行另一项工作
构建步骤#3 - 执行Shell
$END=timestamp
TIME_LAPSED=$END-$START
(post lapsed time somewhere)
答案 0 :(得分:26)
贝壳之间还有一件事:工作空间 简单而愚蠢的解决方案:使用文件!
巨大的额外优势:当您将作业分成多个作业并使用Clone Workspace插件时,它可以正常工作
构建步骤#1 - 执行shell
START=timestamp
...
echo $START > env_start.txt
<强> ... 强>
构建步骤#3 - 执行Shell
START=`cat env_start.txt`
END=timestamp
TIME_LAPSED=$END-$START
答案 1 :(得分:7)
如果您使用声明性管道语法定义environment
部分中的变量并使用script
步骤设置其值可能会有用。
我正在使用声明性管道执行类似的操作,它适用于传递变量(在一个阶段内和阶段之间):
pipeline {
agent any
environment {
variable = ''
}
stages {
stage('Some stage') {
steps {
script {
if (some condition){
variable = 'some value'
} else { variable = 'else value' }
}
sh '${somepath}/bin/script ' +
"-parameter=${variable}"
}
}
}
stage('Dummy print') {
steps {
sh "echo ${variable}"
}
}
[...]
答案 2 :(得分:6)
我们广泛使用注入环境变量插件,效果很好。 解决方案是:
答案 3 :(得分:3)
Jenkins允许您将环境变量注入构建过程。也许您所要做的就是将开始时间和结束时间作为环境变量注入,并在构建步骤中访问它们。
答案 4 :(得分:3)
使用Jenkins变量的一种方法是在构建步骤中使用jenkins-cli.jar
,这需要一些工作,但这会在参数列表中添加FOO=1
,因为它在一个参数列表中运行构建步骤它知道为哪个构建设置参数。
java -jar ${JENKINS_HOME}/war/WEB-INF/jenkins-cli.jar -s ${JENKINS_URL} set-build-parameter FOO 1
答案 5 :(得分:2)
没有:
有效(自v1.656起)。当然,您可以阅读其中的每一个,但在后续构建步骤中无法使用分配给它们的新值。
因此,到目前为止,JediMasterCoder通过像Destroyica这样的文件的回答和处理是唯一的选择。
答案 6 :(得分:2)
@Gurubaran的解决方案对我有用,您需要在jenkins中安装“ Environment Injector”插件,然后
第一步: 使用shell / powershell / windows batch / etc。创建生成一个属性(键=值)文件。例如:文件路径为$ WORKSPACE / env.properties。
第2步: 添加一个“注入环境变量”组件,并将“属性文件路径”设置为$ WORKSPACE / env.properties
在步骤2之后: 您可以在以下步骤中使用这些环境变量。
答案 7 :(得分:0)
除了@Gurubaran建议之外(如果没有其他选择,我就会这样做),我只是选择加入构建步骤,这将大大简化这一需求。
您将需要关心错误处理逻辑和退出条件,但您的环境将是稳固的!
我希望这会有所帮助。