如何在 Jenkins/Hudson 中记住上次构建使用的参数值

5
我需要在使用参数开始新的构建时记住上一个参数值。
我有两个字符串参数:
${BRANCH}
${ServerSpecified}

在第一次构建执行时,我需要这些值为空白,但对于第二次执行,我需要第一次执行的值,在第三次执行中,我需要第二次执行的值,以此类推...

我需要安装插件吗?我尝试使用Groovy中的动态参数,但我无法提取最后一个值。有人知道如何做到这一点或者有任何其他想法吗?

5个回答

4
为了从之前的执行中检索参数,您可以在管道中按照以下方法进行操作:
def defaultValueForMyParameter = "My_Default_Value"

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

pipeline {

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

    ...
}

此代码跟踪参数的最后一个使用值,允许在运行期间更改它。如果作业中不存在该参数,则会创建该参数,并将默认值分配给它。


1
我个人不太喜欢在构建过程中保留参数,因为有重播按钮可以使用,但今天被要求这样做。我尝试了很多方法来实现,必须说我并不觉得这种解决方案很优雅,但目前为止这是我尝试的每种情况下都能正常工作的唯一方法。谢谢Sergio。 - fredericrous

3

有一个重建插件,可以让您重新构建任何感兴趣的作业。它还允许您修改一个或多个原始构建参数。


2

2

是的,看起来你正在尝试发明类似于版本号插件

该插件创建一个新的版本号并将其存储在配置中指定名称的环境变量中。

因此,您可以使用任意多个变量。


3
谢谢,但我能用另一种方法解决问题...使用这行代码def test = jenkins.model.Jenkins.instance.getItem("6.6 Dev Brafton Deploy").lastBuild.getBuildVariables().get("BRANCH");在动态参数中。 - davdomin
嗨@DavidDominguez,我是Jenkins的新手。请告诉我在哪里写这行代码? - Sanjay Raz
@SanjayRaz 你必须先安装动态参数插件...然后将此代码放置在参数配置中..所以我在6年前就已经这样做了..也许动态参数已经发生了改变。 - davdomin

0

每隔几个月/年,我都要做同样的事情,然后我会为“上次我是怎么解决的?”而苦恼。这与@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管道中,params包含当前构建的作业/构建参数值。该HashMap在parameters 定义块被评估之前初始化。该重新评估在每次构建时发生。所以:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接