我有一组使用以下 groovy 脚本生成的多分支管道作业:
[
'repo1',
'repo2',
].each { service ->
multibranchPipelineJob(service) {
displayName(service)
branchSources {
git {
remote("[email protected] /cdn-cgi/l/email-protection:whatever/${service}.git")
credentialsId('gitlab-ssh-key')
}
}
orphanedItemStrategy {
discardOldItems {
daysToKeep(0)
numToKeep(30)
}
}
triggers {
periodic(5)
}
}
}
并在每个回购协议中Jenkinsfile
看起来如下:
#!/usr/bin/env groovy
properties([
gitLabConnection('[email protected] /cdn-cgi/l/email-protection'),
pipelineTriggers([
[
$class : 'GitLabPushTrigger',
triggerOnPush : true,
triggerOnMergeRequest: true,
]
]),
disableConcurrentBuilds(),
overrideIndexTriggers(false)
])
node {
def sbtHome = tool name: 'sbt-0.13.15', type: 'org.jvnet.hudson.plugins.SbtPluginBuilder\$SbtInstallation'
stage('Checkout') {
checkout scm
}
stage('Build') {
sh "'${sbtHome}/bin/sbt' clean compile"
}
stage('Test') {
sh "'${sbtHome}/bin/sbt' test"
}
if (env.BRANCH_NAME == 'develop' || env.BRANCH_NAME == 'master') {
stage('Publish') {
sh "'${sbtHome}/bin/sbt' publish"
}
}
}
一切正常。这seeder项目从第一个脚本生成所有文件夹,并且给定存储库的所有分支都已正确构建。
不幸的是,在提交+推送到 gitlab 后,我无法触发任何分支的构建。
我已经正确配置了 jenkins - 我的意思是 gitlab 插件,有一个连接,并且一切正常。
我还在 gitlab 端添加了一个 webhook,它也运行正常。发送测试推送后我收到200 OK
从詹金斯和我确实在日志中看到扫描分支已经开始并正确检测到更改。不幸的是,更改后的分支的构建没有启动。以下是分支扫描日志的摘录:
Checking branch ci
‘Jenkinsfile’ found
Met criteria
Changes detected: ci (a7b9ae2f930b0b10d52bb42f1ecf96a68bba4a30 → 39a4c1a65051d5e90079feec14ad22455a77c58e)
Did not schedule build for branch: ci
我 100% 确定这不是我的 jenkins 实例和 gitlab 帐户之间的通信问题。我看到推送到 gitlab 后触发了 webhook,我看到请求正在发送并且分支扫描正在运行。也检测到变化,但是到底为什么工作还没有开始?我也读过docs https://github.com/jenkinsci/gitlab-plugin#pipeline-multibranch-jobs-1彻底并正确配置所有内容。
Jenkins version: 2.150.3
Gitlab version: 11.8.1-ee
EDIT
看来将 jenkins 升级到 v.2.164.1 后,一切都开始正常工作。