我有一个时间触发的作业,它需要检索存储在该作业的先前运行中的某些值。
有没有办法在 Jenkins 环境中的作业运行之间存储值?
例如,我可以在 shell 脚本操作中编写类似 next 的内容:
XXX=`cat /hardcoded/path/xxx`
#job itself
echo NEW_XXX > /hardcoded/path/xxx
但是有没有更可靠的方法呢?
我有一个时间触发的作业,它需要检索存储在该作业的先前运行中的某些值。
有没有办法在 Jenkins 环境中的作业运行之间存储值?
例如,我可以在 shell 脚本操作中编写类似 next 的内容:
XXX=`cat /hardcoded/path/xxx`
#job itself
echo NEW_XXX > /hardcoded/path/xxx
但是有没有更可靠的方法呢?
几个选项:
userContent
子目录可供您使用 - 这样该文件至少是 jenkins 安装的一部分,因此更容易迁移或备份。我为构建的(相当大的)代码覆盖率趋势文件执行此操作。适当的解决方案将取决于您的情况。
如果您使用的是Pipelines并且您的变量属于简单类型,则可以使用参数在同一作业的运行之间存储它。
使用该properties
步骤,您可以从管道中配置参数及其默认值。配置后,您可以在每次运行开始时读取它们并在最后保存它们(作为默认值)。在声明式管道中,它可能看起来像这样:
pipeline {
agent none
options {
skipDefaultCheckout true
}
stages {
stage('Read Variable'){
steps {
script {
try {
variable = params.YOUR_VARIABLE
}
catch (Exception e) {
echo("Could not read variable from parameters, assuming this is the first run of the pipeline. Exception: ${e}")
variable = ""
}
}
}
}
stage('Save Variable for next run'){
steps {
script {
properties([
parameters([
string(defaultValue: "${variable}", description: 'Variable description', name: 'YOUR_VARIABLE', trim: true)
])
])
}
}
}
}