【发布时间】:2017-11-29 11:00:14
【问题描述】:
我正在阅读有关 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 上运行 master,使用一个轻量级的执行器,预计会使用很少 资源。任何实质性工作,例如从 Git 服务器克隆代码或 编译 Java 应用程序,应该利用 Jenkins 分布式 构建能力并运行代理节点。
我怀疑这是针对脚本化管道的。
现在我的问题是:
我是否必须在声明性管道中的stage 内创建node(这是可能的),或者当我想在另一个特定代理上运行我的舞台时,我是否必须在舞台内使用代理?
我当前的管道定义了一个label,它位于 4 个代理上。但是我的整个管道总是在一个代理上执行(我想要的),但我怀疑它在slaveX 上执行stage1,也许在slaveY 上执行stage2。为什么这没有发生?
【问题讨论】: