gpt4 book ai didi

jenkins - 使用 groovy 向 jenkins 作业添加附加参数

转载 作者:行者123 更新时间:2023-12-03 16:05:03 26 4
gpt4 key购买 nike

我们有一组 groovy 脚本,我们的用户在他们的 jenkinsfile 中调用这些脚本来设置一些常见的作业属性。但是,我们无法弄清楚在进行此更新时如何保留其现有参数。

我们的常规代码片段:

def newParamsList = []
def newbool = booleanParam(defaultValue: false, description: "deploy", name: "deploy_flag")
newParamsList.add(newbool)
def newParams = parameters(newParamsList)
properties([ //job property declaration
jobProperties,
disableConcurrentBuilds(),
newParams,
addSchedule,
])

但是,这会覆盖参数定义,因此如果用户在调用我们的 groovy 之前在他们的 jenkins 文件中指定了不同的参数定义,它就会被清除。

我可以使用 currentBuild.rawBuild.getAction(ParametersAction) 访问现有参数,但如果我理解正确,我需要 ParameterDefinition 而不是 ParameterValue 来设置属性。我尝试了 currentBuild.rawBuild.getAction(ParametersDefinitionProperty.class) 认为我可以像 ParametersAction 一样使用它,但它返回 null。

是否可以从 Jenkinsfile 调用的 groovy 中获取参数定义?或者有没有一种不同的方法可以让我们在不清除当前在 jenkinsfile 中定义的现有参数的情况下向作业添加附加参数?

最佳答案

所以我们这样做的方法是把它当作一个简单的列表,然后把它们连接在一起。所以 jenkinsfile 首先从共享库中获取一个列表,然后将它们自己添加到列表中,然后设置参数(而不是共享库)

repo jenkinsfiles 这样做:

#!groovy
@Library('shared') _

// Call shared libaray for common params
def paramList = jobParams.listParams ([
"var1": "value",
"var2": "value2"
])
// Define repo specific params
def addtionalParams = [
booleanParam(defaultValue: false, name: 'SOMETHING', description: 'description?'),
booleanParam(defaultValue: false, name: 'SOMETHING_ELSE', description: 'description?'),
]
// Set Jenkins job properties, combining both
properties([
buildDiscarder(logRotator(numToKeepStr: '20')),
parameters(paramList + addtionalParams)
])

// Do repo stuff

我们的共享库如下所示:
List listParams(def body = [:]) {
//return list of parameters
config = BuildConfig.resolve(body)

// Always common params
def paramsList = [
choice(name: 'ENV', choices: ['dev', 'tst'].join('\n'), description: 'Environment'),
string(name: 'ENV_NO', defaultValue: "1", description: 'Environment number'),
]

// Sometimes common params, switch based on jenkinsfile input
def addtionalParams = []

switch (config.var1) {
case 'something':
case 'something2':
addtionalParams = [
choice(name: 'AWS_REGION', choices: ['us-west-2'].join('\n'), description: 'AWS Region to build/deploy'),
]
break
case 'something3':
addtionalParams = [
string(name: 'DEBUG', defaultValue: '*', description: 'Namespaces for debug logging'),
]
break
}

return paramsList + addtionalParams
}

关于jenkins - 使用 groovy 向 jenkins 作业添加附加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48952478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com