我有一个 jenkins 作业 (A
),它使用模式 releases/major.minor
创建并推送一个新的 git 分支。我有为所有名为 B
的分支构建的 jenkins 多分支管道 (releases/*
)。 A
完成后,我想立即在新创建的分支上触发 B
,但 jenkins 不会运行 B/major.minor
,直到有新的扫描。
如何触发扫描?
答案 0 :(得分:2)
您可以使用 build
step 扫描多分支项目。但是,您必须包含 wait: false
,否则会出现以下错误:
ERROR: Waiting for non-job items is not supported
不幸的是,这意味着如果您想在关联的分支上运行多分支管道,您需要手动检查作业是否存在。
def ensureMultibranchJobExists(Map args) {
def branch = args['branch']?.replaceAll('/', '%252F')
def rootJob = args['rootJob']
if (branch == null) {
throw new NullPointerException('branch is required')
}
if (rootJob == null) {
throw new NullPointerException('rootJob is required')
}
// env.JENKINS_URL ends with a slash.
env.ENSURE_MULTIBRANCH_JOB_EXISTS_URL = "${env.JENKINS_URL}job/$rootJob/job/$branch/"
print "Ensuring multibranch job exists: ${env.ENSURE_MULTIBRANCH_JOB_EXISTS_URL}"
def lastHttpStatusCode = null
for (int i=0; i < 12; i++) {
lastHttpStatusCode = sh(
returnStdout: true,
script: '''
#!/bin/bash
set -euo pipefail
curl \
--output /dev/null \
--silent \
--user devtools:<MY_TOKEN> \
--write-out '%{http_code}' \
"${ENSURE_MULTIBRANCH_JOB_EXISTS_URL}" \
;
'''.trim(),
)
if (lastHttpStatusCode == '200') {
break
} else {
print "Last status code: $lastHttpStatusCode"
}
sleep(
time: 10,
unit: 'SECONDS',
)
}
if (lastHttpStatusCode != '200') {
error "${env.ENSURE_MULTIBRANCH_JOB_EXISTS_URL} failed. Expected 200 status code, but received: $lastHttpStatusCode"
}
}