我的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的管道'时,JenkinsfileAllBranches表现得非常奇怪 . 它一次又一次地轮询同一个分支 . 我该如何解决这个循环?在阶段 - 调用Jenkins文件的特定分支,我注意到它总是执行分支作为master而不是branch1或branch2,其中找到scm更改 .