2011-08-08 79 views
12

我们使用Jenkins来自动化我们的几个构建和测试流程。对于我们的一些过程,开始构建的工程师需要指定一个参数。但该参数的可能值和最佳值的范围在整个一天的过程中都会发生变化。在构建Jenkins作业时,是否可以在中途更改构建参数?

我想要做的就是让工程师指定一个值 - 如果他们知道最佳值 - 或者将其保留为空,并通过早期构建步骤计算出值。如果计算值,我希望计算构建步骤来更新作业的参数值。这样,所有后续的构建步骤不必担心使用该参数或计算它们,只是使用该参数。

它看起来像Groovy Script Plugin也许能够做到这一点,但我看不到我如何设置构建参数,只是让他们。

回答

7

找到了答案:用EnvInject Plugin。其中一个功能是构建步骤,该步骤允许您从设置文件中将参数“注入”构建作业。我使用了一个构建步骤来创建设置文件,然后使用另一个构建步骤来注入新值。然后,所有后续构建步骤和构建后操作都使用新值。

3

詹金斯确实有参数化构建的能力。对于字符串参数,开发人员可以将该字段留空,然后您的构建脚本可以检查env。变量为参数设置。如果env。变种。没有设置,脚本可以执行任何需要的计算(我不认为詹金斯有“预先构建步骤”)并将其传递。对于选择参数,第一行可以是类似于(Default)的东西,并且构建脚本再次可以测试其值并相应地采取行动。

注上(Default)

我试图离开选择框的第一个行空白,詹金斯正确保存它的第一次;但是当我回来重新配置这个版本时,詹金斯在选项上进行了某种修剪,并且删除了前面的空白行,所以我在(Default)上进行了解决。

我希望这有助于
扎卡里

+2

这种做法的伟大工程时,我只有一个构建步骤。但是我有很多构建步骤以不同的方式引用构建参数。我是基于脚本的(例如Windows BAT File或PowerScript)进行条件化处理,但是我无法设置其他条件,如复制构件或触发器构建。好主意,但。 –

0

这是我的解决方案,应与詹金斯管道工作:

# Jenkinsfile 
// define job parameters 
properties([parameters([string(defaultValue: 'Hello', description: 'How should I greet the world?', name: 'Greeting')])]) 
// update or replace parameter 
void setParam(String paramName, String paramValue) { 
    List<ParameterValue> newParams = new ArrayList<>() 
    newParams.add(new StringParameterValue(paramName, paramValue)) 
    $build().addOrReplaceAction($build().getAction(ParametersAction.class).createUpdated(newParams))  
} 

print params.Greeting 
setParam("Greeting", "bonjour") 
print params.Greeting 
相关问题