我有一个Jenkins声明性管道(Jenkins版本2.138.3) 在Jenkins屏幕上,为什么我看到同一阶段说“编译”是在同一执行程序上执行的?...?
示例:名为“ 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'}
}
}
}
答案 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的代理,则可能会出现与第一阶段不同的机器。