我正在使用Jenkins和Github插件,通过集成GitHub的webhooks,它可以完美地工作,但每次将代码推送到存储库时都会触发构建。
有没有办法仅在对远程分支master
进行更改时才触发构建?
我正在使用Jenkins和Github插件,通过集成GitHub的webhooks,它可以完美地工作,但每次将代码推送到存储库时都会触发构建。
有没有办法仅在对远程分支master
进行更改时才触发构建?
使用带有when语句的流水线作业是一种可能的选择。
这里有一个示例,它从您的repo检出所有分支,并使用git for-each-ref --sort=committerdate refs/remotes/
扫描分支,以查看哪个分支最后更新。如果最近更新了main
,则检出并运行其他阶段。
def do_build = true
pipeline {
agent any
stages {
stage('Checkout SCM') {
steps {
// checkout all branches
checkout([$class: 'GitSCM',
branches: [[name: '*/*']],
userRemoteConfigs: [[credentialsId: 'YOUR_JENKINS_SSH_KEY', url: 'ssh://git@<YOUR-GIT-REPO-URL>']]])
script {
def last_git = sh (
script: 'git for-each-ref --sort=committerdate refs/remotes/',
returnStdout: true
).trim()
do_build = last_git.endsWith("main")
}
}
}
stage('Build') {
when {
expression { do_build }
}
steps {
echo "checkout main"
checkout([$class: 'GitSCM',
branches: [[name: '*/main']],
userRemoteConfigs: [[credentialsId: 'YOUR_JENKINS_SSH_KEY', url: 'ssh://git@<YOUR-GIT-REPO-URL>']]])
// DO OTHER STUFF ON MAIN BRANCH E.G. TESTS
}
}
}
}