如何在jenkinsfile中为某个构建作业动态分配限制类别

时间:2018-01-16 21:45:03

标签: jenkins jenkins-plugins jenkins-pipeline

在我正在使用的构建环境中,我有X个客户端构建作业,需要由主jenkins文件踢出。另外,我有Y个分支机构。在这些Y分支中,其中一些子集可用于这些客户端构建作业。所以我想要做的是能够动态地为jenkins文件中的构建作业分配一个限制类别/标签。更简单。我只是试图能够踢出作业并为它们分配标签,以便限制单个节点上单个标签的作业数量(但可以由其他节点使用)。

我已经浏览了各种插件,看起来我想要的是Node和Label Parameter的组合,然后是Throttle Concurrent Builds。我希望能够做的是让特定的客户端自由式作业不知道标签或油门类别(这样我就不必在分支更改和克隆客户端项目时不断更新它们)。所以我想我可以在jenkins文件中动态执行此操作。我觉得我很接近,它只是没有做我想做的事。这是我目前的代码:

pipeline {
agent none
stages{
    stage('Build Everything') {
        steps {
            script {
                def builds = [:]
                builds["server"] = {
                    build job: 'Test_Server', parameters: [
                        [$class: 'LabelParameterValue', name: 'NODE_NAME', label: 'justin_trunk'],
                        [$class: 'StringParameterValue', name: 'DEVROOT', value: env.DEVROOT],
                        [$class: 'StringParameterValue', name: 'REQUESTED_REVISION', value: env.REQUESTED_REVISION]
                    ]
                }
                builds["client"] = {
                    build job: 'Test_Client', parameters: [
                        [$class: 'LabelParameterValue', name: 'NODE_NAME', label: 'justin_trunk'],
                        [$class: 'StringParameterValue', name: 'DEVROOT', value: env.DEVROOT],
                        [$class: 'StringParameterValue', name: 'REQUESTED_REVISION', value: env.REQUESTED_REVISION]
                    ] 
                }
                throttle(['justin_trunk']) {
                    parallel builds
                }
            }
        }
    }
}
}

所以这段代码"工作"因为它使用这些标签踢出构建。在Jenkins全局配置中,我有一个名为justin_trunk的Throttle类别,它具有与之关联的标签justin_trunk,它应该将节点限制为一个并发运行。这段代码会发生什么,它在同一台机器上并行启动。这显然是我试图通过分配油门类别来避免的。

我知道如果我将油门类别附加到下游作业本身,这是有效的,但这是我想要避免的。类别和标签会随着时间的推移而频繁变化,我不想在很多地方编辑更改,以便获得我认为非常简单的限制功能。

0 个答案:

没有答案