【发布时间】:2020-06-29 14:01:05
【问题描述】:
我正在通过声明方式使用 Jenkins Pipeline,我想触发另一个具有分支名称的作业。
例如,我有两个不同的管道 (PipelineA -PipelineB),其阶段为 JobA 和 JobB。
JobA 的一个阶段应该通过使用env.GIT_BRANCH 的参数触发JobB。我的意思是,如果我们通过 origin/develop 触发 JobA,那么它应该触发 'JobB' 并运行它具有 origin/develop 条件的阶段。
同时,我们还对JobB 进行了一些单独的更改,它也有自己的 GIT_BRANCH 表达式。因此我无法找到一种方法来单独管理它而不影响JobA。需要澄清的是,当 JobA 使用 origin/stage 参数触发 JobB 时,由于 JobB 的最新更改是 origin/development 而 GIT_BRANCH 是 origin/development,我无法运行具有阶段条件的阶段。
这是我的脚本。
stage ('Job A') {
steps {
script {
echo "Triggering job for branch ${env.GIT_BRANCH}"
ret = build(job: "selenium_tests",
parameters: [
string(name: "projectName", value: "Project1"),
string(name: "branchName", value: "env.GIT_BRANCH")
],
propagate: true,
wait: true)
echo ret.result
currentBuild.result = ret.result
}
}
}
parameters {
string(defaultValue: "project1", description: 'Which project do you want to test?', name: 'projectName')
string(defaultValue: "origin/development", description: 'Environment for selenium tests', name:'branchName')
}
stage ('Job B') {
when {
beforeAgent true
expression { params.projectName == 'Project1' }
expression { params.branchName == "origin/stage"}
expression{ return env.GIT_BRANCH == "origin/stage"}
}
steps {
script {
//Do something
}
}
}
【问题讨论】:
-
如果你想让 Job B 对来自期望分支的代码运行,只需添加一个阶段来切换到期望的分支,并且 Job B 的每个阶段都不需要条件。
标签: jenkins jenkins-pipeline jenkins-groovy