Многоотраслевой конвейерный конвейер JenkinsTriggers для эфемерной / подстановочной ветви (feature- * или rc- *) - PullRequest
0 голосов
/ 12 февраля 2019

Я занимаюсь разработкой приложения, в котором есть несколько компонентов, которые собраны вместе и построены с использованием декларативных конвейеров Jenkins.Я использую git flow для своей архитектуры ветвления и модели развертывания.

У меня уже настроены многоотраслевые конвейеры, которые почти соответствуют моим потребностям.Однако у меня возникла проблема с функцией upstreamProjects.В ветвях, которые не существуют во всех репозиториях или проектах Jenkins, конвейер не запускается.Теперь любая ветка может быть определена в объектах upstramProjects, но что, если вы не знаете, каким будет это имя ветки?

Например, ветвь разработки существует во всех репозиториях.Если я внесу изменения в ядро ​​/ разработку, после завершения тестирования он запускает ticket-system-A и B, а затем развертывается для тестирования для каждого клиента.Мне нужно, чтобы это произошло с ветками rc-* и feature-*.Однако, поскольку ветви rc-* и feature-* создаются только в одном репо, а затем объединяются, они не запускают нисходящий конвейер.

Работает:

git commit / pushcore/develop> ядро ​​запущено, и тестирование происходит / проходит> запускает систему A / B для тестирования> развертывание на клиентском тесте env

Не работает:

git create / commit / push core/rc-1.2.3> ядро ​​запущено и тестирование происходит / проходит> потом ничего ...

Что я хочу, чтобы произошло:

git create / commit / push core/rc-1.2.3> ядро ​​запускается и тестируетсяпроисходит / проходит> запуск системы A / B для тестирования> развертывание на клиентской стадии env

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

Client 1/2 Jenkinsfile

client3 аналогично, но pipeTriggers указывает на систему 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]
        ...
      }
    }
  }
...