Jenkins多分支管道管线用于临时/通配符分支的触发器(feature- *或rc- *)

时间:2019-02-12 00:23:18

标签: jenkins jenkins-pipeline jenkins-groovy multibranch-pipeline jenkins-declarative-pipeline

我正在开发一个应用程序,该应用程序具有多个组件,这些组件全部组合在一起并使用Jenkins声明式管道构建。我将git flow用于分支架构和部署模型。

我已经配置了多分支管道,几乎可以满足我的需求。但是,我在上游项目功能上遇到了问题。在并非所有存储库或Jenkins项目中都不存在的分支上,不会触发管道。现在可以在upstramProjects中定义任何分支,但是如果您不知道该分支的名称该怎么办?

例如,develop分支存在于所有存储库中。如果我对核心/开发进行更改,则在完成测试后,它将触发票务系统A和B,然后部署到每个客户端进行测试。我需要在rc-*feature-*分支上执行此操作。但是,由于rc-*feature-*分支仅在一个存储库中创建,然后在以后合并,因此它们不会触发下游管道。

作品:

git commit / push core/develop>核心已触发,测试进行/通过>触发系统A / B进行测试>部署到客户端测试环境

不起作用:

git create / commit / push core/rc-1.2.3>核心被触发并且测试发生/通过>然后什么都没有...

我想发生的事情:

git create / commit / push core/rc-1.2.3>触发核心并进行测试/通过>触发系统A / B进行测试>部署到客户端暂存环境

App Architecture:
bot-core - Core application that contains client agnostic methods/plugins

bot-ticket-system-A - ticketing system A components
bot-ticket-system-B - ticketing system B components

bot-client1 - using system A and contains client1 specific plugins
bot-client2 - using system A and contains client2 specific plugins
bot-cleint3 - using system B and contains client3 specific plugins

Deployment Architecture:
             bot-core
                /\
               /  \
ticket-system-A    ticket-system-B
   /       /           \
client1 client2       client3
  \       \              /
   \       \            /
    \       \          /
     ------------------
            \/
       Complete App
   Deployed to App Engine

客户端1/2 Jenkinsfile

client3相似,但是pipelineTriggers指向系统B。

#!/usr/bin/groovy

import net.sf.json.JSONArray
import net.sf.json.JSONObject


pipeline {
  agent {
    docker {
      image 'my/image'
      args '-u 0:0'
    }
  }

  environment {
    GCLOUD_PROJECT = credentials('gcp-slackbot-project')
    GCLOUD_KEYFILE = credentials('gcloud-api-key.json')
    GIT_COMMIT_COMMENT = sh script: 'git log -1 --pretty=%B', returnStdout: true
    HOME = '.'
  }

  triggers {
    upstream(
      upstreamProjects: "bot-ticket-system-A/rc-*, bot-ticket-system-A/feature-*, bot-ticket-system-A/" + env.BRANCH_NAME.replaceAll("/", "%2F"),
      threshold: hudson.model.Result.SUCCESS
    )
  }

  stages {

    stage('pretest') {
      steps {
        ...
        [REDACTED]
        ...
      }
    }
  }

0 个答案:

没有答案