我正在通过声明性方式使用Jenkins Pipeline,我想触发另一个具有分支名称的工作。
例如,我有两个不同的管道(PipelineA -PipelineB),分别具有阶段JobA
和JobB
。
JobA
的一个阶段应使用JobB
通过参数触发env.GIT_BRANCH
。我的意思是,如果我们通过原点/显影触发JobA
,那么它应该触发'JobB'并运行具有原点/显影条件的阶段。
同时,我们还对JobB
进行了一些单独的更改,并且它还具有自己的GIT_BRANCH表达式。因此,我无法找到一种方法来单独管理该变量而不影响JobA
。需要说明的是,当JobA用原点/阶段参数触发JobB时,由于JobB的最新更改是原点/展开,而GIT_BRANCH是原点/展开,我无法运行具有阶段条件的阶段。
这是我的剧本。
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
}
}
}
答案 0 :(得分:1)
触发作业B时再传递一个分支的参数
stage('Trigger Job A') {}
stage('Trigger Job B') {
when {
allOf {
beforeAgent true
expression { params.projectName == 'Project1' }
expression{ return env.GIT_BRANCH == "origin/stage"}
}
}
steps {
build(job: "selenium_tests/Job B",
parameters: [
string(name: "projectName", value: "Project1")
strint(name: "branchName", value: "${env.GIT_BRANCH}")
],
propagate: true,
wait: true)
}
}
在Job B'Jenkinsfile中,添加一个阶段作为第一阶段以切换到所需分支
pipeline {
parameters {
string(name: 'branchName', defaultValue: 'develop')
}
stages {
stage('Switch branch') {
steps {
sh "git checkout ${params.branchName}"
}
}
// other stages
}
}