我正在开发一个应用程序,该应用程序具有多个组件,这些组件全部组合在一起并使用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
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]
...
}
}
}