我正在阅读Jenkins管道的最佳实践 . 我创建了一个声明性管道,它不执行并行作业,我想在同一个从站上运行所有内容 .
我用:
agent {
label 'xxx'
}
我的其余部分看起来像:
pipeline {
agent {
label 'xxx'
}
triggers {
pollSCM pipelineParams.polling
}
options {
buildDiscarder(logRotator(numToKeepStr: '3'))
}
stages {
stage('stage1') {
steps {
xxx
}
}
stage('stage2') {
steps {
xxx
}
}
}
post {
always {
cleanWs()
}
failure {
xxx"
}
success {
xxx
}
}
}
现在我读了最佳实践here . 第4点告诉我们:
执行:节点内的所有材料工作管道内的任何材料工作都应在节点块内进行 . 为什么?默认情况下,Jenkinsfile脚本本身在Jenkins主服务器上运行,使用轻量级执行程序,预计使用的资源非常少 . 任何重要的工作,如从Git服务器克隆代码或编译Java应用程序,都应该利用Jenkins分布式构建功能并运行代理节点 .
我怀疑这是脚本管道 .
现在我的问题是:
我是否必须在声明性管道中创建 node
node
(这是可能的)或者当我想在另一个特定代理上运行我的舞台时,我是否必须在舞台内使用代理?
我当前的管道已经定义了一个 label
,它位于4个代理上 . 但是我的整个管道总是在一个代理上执行(我想要的),但我怀疑它在 slaveX
上执行 stage1
,在 slaveY
上执行 stage2
. 为什么这不会发生?
1 回答
文档很容易让人误解 .
文档建议的是利用分布式构建 . 通过使用
agent
或node
块激活分布式构建 . 当您想要在一个节点上几乎完全运行管道时,应该使用agent
. 节点块允许更灵活,因为它允许您指定应该执行粒度任务的位置 .如果在某个代理程序上运行管道,并且使用相同代理程序封装了一个带有节点的步骤,则不会对将新执行程序分配给使用节点封装的步骤产生任何影响 . 这样做没有明显的好处 . 您将只是消耗您不需要的执行程序 .
总之,在使用
agent
时,您已经在使用分布式构建,这就是文档模糊推荐的内容 .