在詹金斯中,为什么我们看到两个不同的执行者执行同一阶段?

时间:2019-07-20 04:55:24

标签: jenkins

我有一个Jenkins声明性管道(Jenkins版本2.138.3) 在Jenkins屏幕上,为什么我看到同一阶段说“编译”是在同一执行程序上执行的?...?

Image attached

示例:名为“ multi-branch-pipeline-1”的管道在具有三个执行程序的名为“ agent-1”的代理上运行...此处阶段“ stage-promotion”正在执行两个不同的执行者(2,3)。

pipeline {
agent {label 'agent-1'}
     stages{    
        stage('compile') {
            agent {label 'agent-1'}
        }
        stage('stage-promotion') {
            agent {label 'agent-1'}
        }
    }   
}

1 个答案:

答案 0 :(得分:0)

Afaik,嵌套的agent声明是这样工作的,当内部程序运行时,外部程序将保持其执行程序的分配和可用性。

由于您使用相同的标签(或直接使用代理名称进行寻址),因此相当于同一代理上的第二个执行者,因此对于这种不寻常的情况似乎没有逻辑,因为您可以忽略代理声明等于同一标签。

以下操作与您的操作相同:

pipeline {
agent {label 'agent-1'}
     stages{    
        stage('compile') {
            // runs on agent-1
        }
        stage('stage-promotion') {
            // runs on agent-1
        }
    }   
}

嵌套代理在您要临时切换管道中的计算机时非常有用:

pipeline {
agent {label 'A'}
     stages{
        stage('start server') {            
            // runs on machine x with label A
        }    
        stage('test') {
            agent {label 'B'}
            // runs on machine y with label B
        }
        stage('stop server and archive logs') {
            // runs on **the same machine as in stage start server**, same workspace etc.
        }
    }   
}

重要的一点是,在最后阶段,我们可以确保与第一阶段一样,没有等待时间(即执行程序争用),位于同一工作区的同一台计算机上。如果仅在这些阶段中使用代理声明,那么如果您连接了多个具有标签A的代理,则可能会出现与第一阶段不同的机器。