我正在尝试在声明性管道中改编一些旧的多职业。 我希望声明式管道中并行步骤的每个阶段都使用自己的执行程序。
我得到的行为是詹金斯正在使用同一执行程序来运行所有阶段。
pipeline {
agent { label 'macmini'}
stages() {
stage('SCM') {
steps{
//clone repo
}
}
stage('Heavy build Stage'){
parallel {
stage ("First Job"){
steps {
//do some heavy work
sleep 100
}
}
stage ("Second Job"){
steps {
//do some heavy work
sleep 100
}
}
}
}
}
}
在上面的示例中,我希望该阶段(“第一份工作”)和(“第二份工作”)使用它自己的执行程序。但是Jenkins仅使用一个执行程序来运行两个阶段……它们使用相同的工作区也很重要。
如果我在每个阶段之后设置一个代理/节点,它们将在其自己的执行器中运行,但它还将创建一个新的工作区(my-job @ 2)。
为了使自己更清楚一点,我习惯于与执行者一起工作,以平衡我不同奴隶之间的工作。我知道(凭经验)每个从站可以并行运行4个阶段。这些作业是由网络挂钩触发的。
所以,如果工作开始,我会得到
slave 1
1. idle
2. idle
3. (Heavy Build Stage) #1
4. idle
如果再触发三个工作,我将得到以下情况
slave 1
1. (Heavy Build Stage) #2
2. (Heavy Build Stage) #3
3. (Heavy Build Stage) #1
4. (Heavy Build Stage) #4
这意味着我正在运行8个阶段(并行2个阶段* 4个构建)
我正在寻找一种拆分每个阶段以使用其自己的执行器的方法,这样我就可以得到以下情形
Build Queue
1. job #3
2. job #4
slave 1
1. (Heavy Build Stage / Second Jo) #2
2. (Heavy Build Stage / First job) #2
3. (Heavy Build Stage / Second Job) #1
4. (Heavy Build Stage / First job) #1
当我尝试在每个阶段之后设置代理/节点的解决方案
stage("First Job"){
agent{ label SLAVE_NAME }
...
}
它可以工作,但是每个阶段都在其自己的工作空间中运行(使用@ 2创建一个新文件夹),但是我希望它们在同一工作空间中运行。
在每个阶段使用customWorkspace选项时,我的行为相同
agent {
node {
label "macmini"
customWorkspace 'teste'
}
}
日志显示
Running in /Users/mobile/jenkins/teste
[Pipeline] {
[Pipeline] ws
Running in /Users/mobile/jenkins/teste@2
答案 0 :(得分:0)
首先,您需要2个代理。每个代理都有自己的标签(在下面的示例中为“ jenkinsagent1”和“ jenkinsagent2”)。没有为全局管道提供代理。每个阶段都有自己的代理商。
pipeline{
agent none //this tells the pipeline that it is not executed by 1 agent
stage('Is parallel executed on 2 agents') {
parallel {
stage('foo'){
agent{
node { label'jenkinsagent1' //executed by this agent
customWorkspace 'myWorkspace/test' //use this workspace
}
}
steps { // do something}
}
stage('bar'){
agent{
node { label 'jenkinsagent1' //execute on this agent
customWorkspace 'myWorkspace/test'} } //use this workspace
steps { // do something different} //executed by the other agent
} //closing stage bar
} //closing parallel
// closing pipeline
如果要添加第三阶段或第四阶段,请小心。您始终必须为每个新阶段设置代理。如果不这样做,管道将无法正常工作。