groovy 如何在Jenkins/哈德逊中记住上次构建时使用的参数值

falq053o  于 2023-04-19  发布在  Jenkins
关注(0)|答案(5)|浏览(261)

我需要记住最后的参数值,当我开始一个新的构建参数。
我有两个字符串参数:

${BRANCH}
${ServerSpecified}

在第一次构建执行时,我需要这些值为空,但对于第二次执行,我需要第一次执行的值,在第三次执行中,第二次执行的值,等等。
我需要安装一个插件吗?我试过在groovy中使用动态参数,但是我不能提取最后一个值。有人知道怎么做或者有其他的想法吗?

iq3niunx

iq3niunx1#

为了从以前的执行中检索参数,您可以在管道中遵循以下方法:

def defaultValueForMyParameter = "My_Default_Value"

node('master') {
    parameterValue = params.MY_PARAMETER ?: defaultValueForMyParameter
}

pipeline {

    parameters {
        string(name: 'MY_PARAMETER', defaultValue: parameterValue, description: "whatever")
    }

    ...
}

此代码跟踪参数的最后一次使用值,允许在运行之前或运行期间对其进行更改。如果作业中不存在该参数,则将创建该参数并为其分配默认值。

uxh89sit

uxh89sit2#

有一个Rebuild plugin,它允许您重新构建任何感兴趣的作业,还允许您修改一个或多个原始构建参数

byqmnocz

byqmnocz3#

是的,看起来你正在尝试发明像Version Number Plugin这样的东西:
这个插件创建一个新的版本号,并将其存储在您在配置中指定的环境变量中。
所以你可以想要多少变量都行。

qmelpv7a

qmelpv7a4#

没有人提到Persistent Parameter plugin,这是我使用的。
支持字符串参数、选择等。

vq8itlhq

vq8itlhq5#

每隔几个月/几年,我都要做同样的事情,我会为“我上次是怎么解决的?”而挠头。这和@sergio-prats写的是一样的解决方案,但有一个转折:

pipeline {
    agent { label any }

    parameters {
        string(name: 'TARGET_SYS',
                defaultValue: params.TARGET_SYS ? params.TARGET_SYS : 'system1',
                description: 'Target system')
    }
...
}

对于选择参数也可以这样做,例如:

import groovy.transform.Field

@Field
List<String> TARGET_SYS_VALUES = ['ci', 'dev', 'test', 'staging']

pipeline {
    agent { label any }

    parameters {
        choice(name: 'TARGET_SYS',
                choices: (params.TARGET_SYS ? [params.TARGET_SYS] : []) +
                             (TARGET_SYS_VALUES - 
                                 (params.TARGET_SYS ? [params.TARGET_SYS] : [])),
                description: 'Some fictive target systems')
    }
...
}

这是如何工作的?在Jenkins pipelines中,params包含 current build的job/build参数值。该HashMap在 * parameters * 定义块 * 被评估之前 * 被初始化。重新评估发生在 * 每个build* 上。所以:

  • string在每个构建N中评估defaultValue,并在 next 构建N+1中提供该值。
  • choice没有defaultValue选项。相反,choices选项的第一个值作为默认值提供。该选项也在每次构建期间进行评估,并在 * 下一个 * 构建中提供。

相关问题