使用 Jenkins DSL 添加参数 "Build Selector for Copy Artifact"

Add parameter "Build Selector for Copy Artifact" using Jenkins DSL

我正在将 Jenkins 作业从手动配置转换为 DSL,这意味着我正在尝试创建一个 DSL 脚本来创建当前的作业。

作业当前已参数化,其中一个参数的类型为 "Build Selector for Copy Artifact"。我可以在工作 XML 中看到它是 copyartifact 插件,特别是我需要使用 BuildSelectorParameter。

但是 Jenkins DSL API 没有关于使用这个插件来设置参数的指导 - 它只对使用它来创建构建步骤有帮助,这不是我需要的。

我在 API 的参数选项下也找不到与此相关的任何内容。

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

parameter

如果我需要使用配置块,那么欢迎提供任何相关提示,因为对于初学者来说,相关文档毫无用处。

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

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()
            }
        }
    }
}

为了达到这个目的,我用构建选择器参数手动创建了一个作业。然后在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>

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

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

我有 Jenkins 1.6 版(带有复制工件插件),您可以像这样在 DSL 中执行此操作:

job('my-job'){
  steps{
        copyArtifacts('job-id') {
            includePatterns('artifact-name')
            buildSelector { latestSuccessful(true) }
        }
    }
}

完整示例:

job('03-create-hive-table'){
    steps{
        copyArtifacts('seed-job-stash') {
            includePatterns('jenkins-jobs/scripts/landing/hive/landing-table.sql')
            buildSelector { latestSuccessful(true) }
        }
        copyArtifacts('02-prepare-landing-dir') {
            includePatterns('jenkins-jobs/scripts/landing/shell/02-prepare-landing-dir.properties')
            buildSelector { latestSuccessful(true) }
        }
        shell(readFileFromWorkspace('jenkins-jobs/scripts/landing/03-ps-create-hive-table.sh'))
    }
    wrappers {
        environmentVariables {
            env('QUEUE', 'default')
            env('DB_NAME', 'table_name')
            env('VERSION', '20161215')
        }
        credentialsBinding { file('KEYTAB', 'mycred') }
    }
    publishers{ archiveArtifacts('03-create-landing-hive-table.properties') }
}