如何触发 jenkins 多分支管道的扫描?

时间:2021-01-12 00:14:28

标签: git jenkins

我有一个 jenkins 作业 (A),它使用模式 releases/major.minor 创建并推送一个新的 git 分支。我有为所有名为 B 的分支构建的 jenkins 多分支管道 (releases/*)。 A 完成后,我想立即在新创建的分支上触发 B,但 jenkins 不会运行 B/major.minor,直到有新的扫描。

如何触发扫描?

1 个答案:

答案 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"
  }
}