我使用声明式管道1.3.2插件,并希望在多个并行阶段使用相同的代理(例如只指定一次agent指令):
stage('Parallel Deployment')
{
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
parallel
{
stage('A') { steps { ... } }
stage('B') { steps { ... } }
}
}然而,Jenkins抱怨说:
在阶段“并行部署”中不允许“代理”,因为它包含并行阶段。
一种解决方案是为每个并行阶段复制agent指令,但这是一种繁琐的操作,会导致大量重复的代码,并具有多个并行阶段:
stage('Parallel Deployment')
{
parallel
{
stage('A') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
steps { ... }
}
stage('B') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
steps { ... }
}
}
}是否有一个更惯用的解决方案,还是重复agent指令对每个并行阶段都是必要的?
发布于 2021-09-30 12:45:43
在pipeline级别指定代理可以是一种解决方案,但可能会导致代理启动&在整个构建过程中运行。
还要注意,这意味着每个阶段(不定义自己的agent)都运行在同一个代理实例上,而不是代理类型。如果并行进程是CPU /资源密集型的,这可能不是您想要的。
不过,如果您想在一个实例上运行并行阶段,并且不能或不想在pipeline级别定义代理,下面是声明性语法的解决方案:
stage('Parallel Deployment') {
agent { dockerfile { label 'docker'; filename 'Dockerfile'; } }
stages {
stage('A & B') {
parallel {
stage('A') { steps { ... } }
stage('B') { steps { ... } }
}
}
}
}或者你选择一个脚本化的管道,它没有这个限制。
发布于 2018-11-15 05:11:34
在管道级声明代理,以便所有阶段都在同一代理上运行。
https://stackoverflow.com/questions/53164528
复制相似问题