Multijob DSL - 如何在 Job DSL 插件中 "label" 每个具有特定 node/cloud/agent 的 phaseJob?

Multijob DSL - How to "label" each phaseJob with specific node/cloud/agent in Job DSL plugin?

我正在尝试 label 每个 phaseJob in multiJob DSL 插件与特定节点(在我的例子中,它是使用 Docker 插件创建的 docker-cloud)。

不是用特定节点(docker-cloud)标记每个 phaseJob,而是用最新提到的 docker-cloud/node 标签标记每个作业。

我尝试了以下示例 DSL 配置:

multiJob('example-multiple-job') {
    steps {
        phase('First') {
            phaseJob('JobA'){
                label('docker-a')
                shell('echo Hello World JobA!') 
                shell('sleep 1m')
            }
            phaseJob('JobB'){
                label('docker-b')
                shell('echo Hello World JobB!')
                shell('sleep 1m')
            }
        }
    }
}

因此,它将整个 multiJob 标记为 docker-b 标签(因为它是最新的)

除此之外,我还尝试了以下语法:

multiJob('example-multiple-job') {
    steps {
        phase('First') {
            job('JobA'){
                label('main-docker-a')
                shell('echo Hello World JobA!') //
                shell('sleep 1m')
            }
            job('JobB'){
                label('main-docker-b')
                shell('echo Hello World JobB!')
                shell('sleep 1m')
            }
        }
    }
}

它创建了具有预期标签的作业,但它们不包含在多作业项目中。

我的期望是:

每个后续 phaseJob 都在自己的 docker-云节点上运行,并自动包含在多个作业项目中,因为它没有标记。

在阅读了 Job DSL 文档一段时间后,我找到了解决方案。其实还是多看点吧:)

这是一个工作示例,说明如何在 docker 个容器

中并行执行多个带有自己标签 node/docker-cloud 的作业
job('JobA') {
    label('docker-a')
    steps {
        shell('echo Hello World Job-A!')
        shell('sleep 1m')
    }
}

job('JobB') {
    label('docker-b')
    steps {
        shell('echo Hello World Job-B!')
        shell('sleep 1m')
    }
}

multiJob('example-multiple-job') {
    steps {
        phase('First') {
            phaseJob('JobA')
            phaseJob('JobB')
        }
    }
}

据我所知,作业和其他所有内容都是单独创建的,但是 multipleJob() 指令只是通过额外的行为和功能来帮助管理它们。