Я занимаюсь разработкой приложения, в котором есть несколько компонентов, которые собраны вместе и построены с использованием декларативных конвейеров 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]
...
}
}
}