Multijob DSL-如何用Job DSL插件中的特定节点/云/代理“标记”每个phaseJob?

时间:2019-10-18 20:45:12

标签: docker jenkins jenkins-job-dsl

我正在尝试 multiJob DSL插件中的每个 phaseJob 标签,并带有特定节点(在我的情况下,这是使用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')
            }
        }
    }
}

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

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

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-cloud节点上运行,并且自动执行,无需标记即可自动包含在“多个作业”项目中。

1 个答案:

答案 0 :(得分:0)

经过一段时间的阅读,我得到了解决方案。实际上,只需要更仔细地阅读即可:)

这里是一个工作示例,说明如何在docker容器中并行执行带有其自己标记的节点/ 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()指令仅有助于通过其他行为和功能来管理它们。