【发布时间】:2016-08-10 14:29:58
【问题描述】:
从另一个管道脚本加载管道脚本时,两个管道不会在同一个节点上执行:第一个在我的主节点上执行,第二个在从节点上执行。
我正在使用带有Pipeline Script from SCM 选项的 Jenkins 管道以这种方式完成很多工作:
我的每个作业都使用
Poll SCM选项定义了它们对应的 Git 存储库 URL,以便在对我的代码进行更改时自动轮询存储库(基本作业用法)。我的每个作业都在其存储库的根目录中定义了一个简单的
Jenkinsfile,其中的管道脚本基本上什么都不做,只是加载一个更通用的管道。
例如:
node {
// --- Load the generic pipeline ---
checkout scm: [$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'http://github/owner/pipeline-repo.git']]]
load 'common-pipeline.groovy'
}()
我的 common-pipeline.groovy 管道执行实际的工作,例如构建、发布或部署工件,例如:
{ ->
node() {
def functions = load 'common/functions.groovy'
functions.build()
functions.release()
functions.deploy()
}
}
现在我不想为每个作业强制节点所以两个管道都有 node("master") 或 node("remote") 因为我真的不想手动处理它,但是我'一旦第一个管道在特定节点(master、slave1、slave2、slave3)上运行,我会喜欢这样第二个/加载的管道在同一个节点上执行,否则我的实际 Git 存储库代码在其他节点的工作区中不可用...
有什么方法可以指定我希望我的第二个管道与第一个管道在同一个节点上执行,或者在使用load 步骤时传递一个参数?
【问题讨论】:
标签: jenkins jenkins-pipeline jenkinsfile