将参数传递给管道脚本

时间:2016-11-19 18:03:14

标签: jenkins groovy jenkins-pipeline

我正在尝试从使用自由式Jenkins构建切换到管道项目。

我喜欢很多关于它的事情,但我希望我可以使用multibranch管道,因为它与我们的公司匹配得更好一些,但目前这不是一个选择。

我们目前所做的是创建一个名为<project name> - <environment>的新构建作业。

所以我现在需要保持这种状态。我有一个脚本的基本轮廓,我可以复制并粘贴到框中,甚至更好的是使用scm的jenkins文件。

我最喜欢这个,这就是我目前在我当地的Jenkins上使用的。

如果我在scm的脚本中对解决方案文件和我想要的环境进行硬编码,那么构建就可以了。

我不喜欢这个选项,因为这意味着我必须拥有许多具有相似名称的脚本才能更改分支。如果我使用解决方案名称和环境添加构建参数,我可以轻松地使脚本处理这些,但是我不喜欢的是当我单击构建按钮时它确认那些是我想要使用的参数。

那么有没有一种方法可以硬编码/获取一个插件,让我可以将这些参数添加为常量或环境变量或其他什么,以便它只是作业的一部分?

修改

作为一个更新来展示我昨天尝试过并为我们的需求而努力的是这个。首先是我安装了multibranch defaults plugin并按照github page上的步骤大纲进行了操作。安装和配置后,我添加了一个新的multibranch项目,将其指向我的git存储库。它现在找到2个分支(如预期的那样)并使用默认配置文件。到目前为止,这似乎适用于我们大约90%的案例。我能看到的唯一问题是,有些人在他们现有的自由式项目中有自定义步骤。但是现在这些人总是可以保持自由式项目。

1 个答案:

答案 0 :(得分:3)

如果我正确理解了您正在寻找的是一种为您的构建提供默认参数的方法。

在我的一个版本中,我做了类似的事情:

stage ('Setup') {
    try {
        timeout(time: 1, unit: 'MINUTES') {
            userInput = input message: 'Configure build parameters:', ok: '', parameters: [
                [$class: 'hudson.model.ChoiceParameterDefinition', choices: 'staging\nproduction\nfree', description: 'Choose build flavor', name: 'BUILD_FLAVOR'],
                [$class: 'hudson.model.ChoiceParameterDefinition', choices: 'Debug\nRelease', description: 'Choose build type', name: 'BUILD_TYPE'],
                [$class: 'hudson.model.ChoiceParameterDefinition', choices: 'NONE\ndevelop\nmaster\nrelease/core_0.5.0\nrelease/core_0.1.8.1\nrelease/core_0.1.9', description: 'Product core branch', name: 'CORE_BRANCH'],
                [$class: 'hudson.model.ChoiceParameterDefinition', choices: '4.1.12\n4.1.11\n4.1.10\n4.1.9\n4.1.8\n4.1.4\n3.5.5\n3.1.8\ncore\nOldVersion', description: 'Version Name', name: 'VERSION_NAME'],
                [$class: 'hudson.model.ChoiceParameterDefinition', choices: 'origin/develop\norigin/hotfix/4.1.11\norigin/release/4.1.8\norigin/hotfix/4.1.7\norigin/hotfix/4.1.9\norigin/hotfix/4.1.10\norigin/release/4.1.6\norigin/release/4.1.5\norigin/hotfix/3.5.5', description: 'Git branch', name: 'GIT_BRANCH'],
                [$class: 'BooleanParameterDefinition', defaultValue: false, description: 'Enable Gradle debug?', name: 'DEBUG']
        ] // According to Jenkins Bug: https://issues.jenkins-ci.org/browse/JENKINS-26143
      }
    } catch (err) {
        userInput = [BUILD_FLAVOR: 'staging', BUILD_TYPE: 'Debug', CORE_BRANCH: 'NONE', VERSION_NAME: '4.1.12', GIT_BRANCH: 'origin/develop'] // if an error is caught set these values
    }
}

<强>解释

我正在使用Try/Catch method来处理异常,然后在“try”部分中,我配置了问题和可能的答案,从我想要显示给开始构建的用户中选择。

然后,在“catch”部分中,我将每个变量中设置的默认值设置为捕获异常,这意味着已经过了1分钟而没有选择相关项。

以下是一些有用的链接:

Pipeline: How to manage user inputs

pipeline-plugin/TUTORIAL.md