我的Jenkins建筑项目管道工作流程如下。 检入存储库有两个文件 - JenkinsfileAllBranches和Jenkinsfile
1)JenkinsfileAllBranches - 轮询所有分支以进行更改
def scm_branch = ''
pipeline {
agent any
triggers {
pollSCM('* * * * *') //used this for quick debugging
}
stages {
stage ('SCM') {
steps {
script {
def git_scm = checkout([$class: 'GitSCM', branches: [[name: '**']],
doGenerateSubmoduleConfigurations: false, extensions: [],
submoduleCfg: [], userRemoteConfigs: [[url: <repository_url>]]])
scm_branch = git_scm.GIT_BRANCH.substring('origin\\'.length())
}
}
}
stage('Call Jenkinsfile for specific branch') {
steps {
print("branch:${scm_branch}")
build job:'Build_Project', parameters:
[[$class:'StringParameterValue', name: 'BRANCH', value: scm_branch]]
}
}
}
}
2)Jenkinsfile - 为了方便起见,我提供了简化的Jenkinsfile
pipeline {
agent any
options {
disableConcurrentBuilds()
}
parameters {
string(name: 'BRANCH', defaultValue:'', description: 'Enter a branch name to build.')
}
stages {
stage ('SCM') {
steps {
script {
print("Parameter BRANCH: ${params.BRANCH}")
}
git url: <repo_url>, branch: params.BRANCH
}
}
}
}
问题:第一个作业应该每分钟轮询一次分支中的更改,第二个作业应该构建找到更改的特定分支。
当我离开管道脚本时,一切都按预期工作。
但是,当我从SCM&#39;中选择&#39; Pipeline时,JenkinsfileAllBranches表现得非常奇怪。它一次又一次地轮询同一个分支。我该如何解决这个循环? 在阶段 - 调用Jenkins文件中的特定分支,我注意到它总是将分支作为master而不是branch1或branch2执行scm更改。