我有一个 jenkins 工作 ( A
),它使用模式创建并推送一个新的 git 分支releases/major.minor
。我有詹金斯多分支管道(B
),为所有名为 的分支构建releases/*
。完成后A
,我想立即触发B
新创建的分支,但詹金斯不会运行B/major.minor
,直到有新的扫描。
如何触发扫描?
您可以使用build
步骤扫描多分支项目。
build(
job: '/my-multibranch-project-name',
wait: false,
)
Run Code Online (Sandbox Code Playgroud)
您必须包含wait: false
,否则您将收到以下错误:
ERROR: Waiting for non-job items is not supported
Run Code Online (Sandbox Code Playgroud)
不幸的是,这意味着如果您想在关联的分支上运行多分支管道,您需要手动检查作业是否存在。
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"
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2621 次 |
最近记录: |