使用Jenkins DSL添加参数"用于复制工件的构建选择器"

sha*_*eoh 5 groovy jenkins-plugins jenkins-job-dsl

我正在将Jenkins的工作从手动配置转换为DSL,这意味着我正在尝试创建一个DSL脚本来创建今天的工作.

该作业当前已参数化,其中一个参数的类型为"用于复制工件的构建选择器".我可以在作业XML中看到它是copyartifact插件,特别是我需要使用BuildSelectorParameter.

然而,Jenkins DSL API没有使用此插件设置参数的指导 - 它只是帮助使用它来创建构建步骤,这不是我需要的.

我也无法在API中的参数选项下找到任何与此相关的内容.

我想在DSL种子脚本中包含一些内容,它将在生成的作业中创建一个与图像中的参数匹配的参数.

参数

如果我需要使用配置块,那么欢迎使用任何提示,因为对于初学者来说,这方面的文档是没有用的.

San*_*dri 3

除了使用配置块之外,我没有找到其他方法来设置构建选择器参数。这是我用来设置它的:

freeStyleJob {
    ...
    configure { project ->
        def paramDefs = project / 'properties' / 'hudson.model.ParametersDefinitionProperty' / 'parameterDefinitions'
        paramDefs << 'hudson.plugins.copyartifact.BuildSelectorParameter'(plugin: "copyartifact@1.38.1") {
            name('BUILD_SELECTOR')
            description('The build number to deploy')
            defaultSelector(class: 'hudson.plugins.copyartifact.SpecificBuildSelector') {
                buildNumber()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了实现这一目标,我使用构建选择器参数手动创建了一个作业。然后在jenkins下查找job的XML配置来查看相关部分,在我的例子中:

<project>
    ...
    <properties>
        <hudson.model.ParametersDefinitionProperty>
            <parameterDefinitions>
                ...
                <hudson.plugins.copyartifact.BuildSelectorParameter plugin="copyartifact@1.38.1"
                    <name>BUILD_SELECTOR</name>
                    <description></description>
                    <defaultSelector class="hudson.plugins.copyartifact.SpecificBuildSelector">
                        <buildNumber></buildNumber>
                    </defaultSelector>
                </hudson.plugins.copyartifact.BuildSelectorParameter>
            </parameterDefinitions>
        </hudson.model.ParametersDefinitionProperty>
    </properties>
    ...
</project>
Run Code Online (Sandbox Code Playgroud)

要使用该configure子句复制该内容,您需要了解以下内容:

  • 配置子句的第一个参数是job节点。
  • 使用该/运算符将返回给定节点的节点的子节点,如果不存在则创建该子节点。
  • 使用该<<运算符会将作为右侧操作数给出的节点附加到左侧操作数。
  • 创建节点时,您可以在构造函数中为其赋予属性,例如:myNodeName(attrributeName: 'attributeValue')
  • 您可以将 lambda 传递给新节点并使用它来填充其内部结构。