如何触发詹金斯多分支管道的扫描?

Hea*_*ers 3 git jenkins

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

如何触发扫描?

Hea*_*ers 5

您可以使用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)