gpt4 book ai didi

jenkins - 动态评估 Jenkinsfile 中的选择参数

转载 作者:行者123 更新时间:2023-12-03 17:37:34 28 4
gpt4 key购买 nike

我正在尝试添加 dynamic choice parameter到具有声明性语法的 Jenkinsfile,使用如下内容:

def myChoices = listBranchesFromGithub(MY_REPO)

pipeline {
parameters {
choice(name: 'mychoice', choices: myChoices)
}
}

但是 listBranchesFromGithub(MY_REPO)评估一次(处理 Jenkinsfile 时),而不是每次我运行作业时。

有没有办法填充 choices每次触发作业?

最佳答案

你有两个选择。

在您的 jenkinsfile 中,处理后再次调用属性。

#!groovy
@Library('shared') _

properties()

// Do pipeline

properties()

def properties() {
// Set Jenkins job properties
properties([
buildDiscarder(logRotator(numToKeepStr: '20')),
parameters([//params])
])
}

亲,简单吗?缺点:只有在步骤成功并且不提前退出时才有效。

替代方案:在构建期间动态调整(我们将这些函数放在共享库中,并在需要更新参数时调用它们,例如工件列表)。注意:可能需要脚本安全批准
/**
* Change param value during build
*
* @param paramName new or existing param name
* @param paramValue param value
* @return nothing
*/
def setParam(String paramName, String paramValue) {
List<ParameterValue> newParams = new ArrayList<>();
newParams.add(new StringParameterValue(paramName, paramValue))
$build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams))
}

/**
* Add a new option to choice parameter for the current job
*
* @param paramName parameter name
* @param optionValue option value
* @return nothing
*/
def addChoice(String paramName, String optionValue) {
addChoice($build().getParent(), paramName, optionValue)
}

/**
* Add a new option to choice parameter to the given job
* @param job job object
* @param paramName parameter name
* @param optionValue option value
* @return
*/
def addChoice(Job job, String paramName, String optionValue) {
ParametersDefinitionProperty paramsJobProperty = job.getProperty(ParametersDefinitionProperty.class);
ChoiceParameterDefinition oldChoiceParam = (ChoiceParameterDefinition)paramsJobProperty.getParameterDefinition(paramName);
List<ParameterDefinition> oldJobParams = paramsJobProperty.getParameterDefinitions();
List<ParameterDefinition> newJobParams = new ArrayList<>();

for (ParameterDefinition p: oldJobParams) {
if (!p.getName().equals(paramName)) {
newJobParams.add(0,p);
}
}

List<String> choices = new ArrayList(oldChoiceParam.getChoices());

choices.add(optionValue);
ChoiceParameterDefinition newChoiceParam = new ChoiceParameterDefinition(paramName, choices, oldChoiceParam.getDefaultParameterValue().getValue(), oldChoiceParam.getDescription());
newJobParams.add(newChoiceParam);

ParametersDefinitionProperty newParamsJobProperty = new ParametersDefinitionProperty(newJobParams);
job.removeProperty(paramsJobProperty);
job.addProperty(newParamsJobProperty);
}

在上述情况下,这些方法位于共享库中的/vars 下。/vars/jobParams.groovy。因此,从 Jenkinsfile 或其他共享库,您可以使用以下语法调用它们:
jobParams.addChoice("ARTIFACT_NAME", "da-name")

关于jenkins - 动态评估 Jenkinsfile 中的选择参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45458359/

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