在声明性管道的并行阶段重用代理
Re-use agent in parallel stages of declarative pipeline
我正在使用 Declarative Pipelines 1.3.2 插件,我想在多个并行阶段使用相同的代理(就像只指定一次 agent
指令一样):
stage('Parallel Deployment')
{
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
parallel
{
stage('A') { steps { ... } }
stage('B') { steps { ... } }
}
}
然而,詹金斯抱怨:
"agent" is not allowed in stage "Parallel Deployment" as it contains parallel stages
一个解决方案是为每个并行阶段复制 agent
指令,但这很乏味并且会导致大量重复代码和许多并行阶段:
stage('Parallel Deployment')
{
parallel
{
stage('A') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
steps { ... }
}
stage('B') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
steps { ... }
}
}
}
是否有更惯用的解决方案,或者每个并行阶段都需要复制 agent
指令?
在管道级别声明代理,以便所有阶段 运行 在同一代理上。
在 pipeline
级别指定代理可能是一个解决方案,但有一个潜在的缺点,即代理在整个构建期间处于启动状态和 运行ning。
另请注意,这意味着每个阶段(未定义自己的 agent
)在同一代理实例上都是 运行,而不是代理类型。如果并行进程是 CPU/资源密集型,这可能不是您想要的。
不过,如果您想在一个实例上 运行 并行阶段,并且不能或不想在 pipeline
级别定义代理,这里是声明性语法的解决方法:
stage('Parallel Deployment') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
stages {
stage('A & B') {
parallel {
stage('A') { steps { ... } }
stage('B') { steps { ... } }
}
}
}
}
或者您选择没有此限制的脚本化管道。
我正在使用 Declarative Pipelines 1.3.2 插件,我想在多个并行阶段使用相同的代理(就像只指定一次 agent
指令一样):
stage('Parallel Deployment')
{
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
parallel
{
stage('A') { steps { ... } }
stage('B') { steps { ... } }
}
}
然而,詹金斯抱怨:
"agent" is not allowed in stage "Parallel Deployment" as it contains parallel stages
一个解决方案是为每个并行阶段复制 agent
指令,但这很乏味并且会导致大量重复代码和许多并行阶段:
stage('Parallel Deployment')
{
parallel
{
stage('A') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
steps { ... }
}
stage('B') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
steps { ... }
}
}
}
是否有更惯用的解决方案,或者每个并行阶段都需要复制 agent
指令?
在管道级别声明代理,以便所有阶段 运行 在同一代理上。
在 pipeline
级别指定代理可能是一个解决方案,但有一个潜在的缺点,即代理在整个构建期间处于启动状态和 运行ning。
另请注意,这意味着每个阶段(未定义自己的 agent
)在同一代理实例上都是 运行,而不是代理类型。如果并行进程是 CPU/资源密集型,这可能不是您想要的。
不过,如果您想在一个实例上 运行 并行阶段,并且不能或不想在 pipeline
级别定义代理,这里是声明性语法的解决方法:
stage('Parallel Deployment') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
stages {
stage('A & B') {
parallel {
stage('A') { steps { ... } }
stage('B') { steps { ... } }
}
}
}
}
或者您选择没有此限制的脚本化管道。