将多个项目合并到一个 Docker Swarm 部署中的良好做法?
Good practices for combining multiple projects in one Docker Swarm deployment?
我们正在开发一个由三部分组成的应用程序:
- 后端(Java EE)(A)
- 前端 (vuejs) (B)
- 管理前端 (React) (C)
以上每一项都适用于现状:
- 在自己的 Git 存储库中维护
- 有自己的
docker-compose.yml
- 有自己的
Jenkinsfile
每个组件的 Jenkinsfile
包含一个 "Deploy" 阶段,基本上只运行以下命令:
docker stack deploy -c docker-compose.yml $stackName
.
然而这种方法感觉不到 "right"。我们正在努力解决一些问题,例如:
- 我们如何部署 "complete application"?第一个猜测是使用单独的
docker-compose.yml
,其中包含 A、B 和 C 的服务。
- 但是我们要把这个文件放在哪里呢?绝对不在 Git 回购协议之一中,因为它不属于那里。第四个回购协议?
- 如果 A、B、C 的上述存储库之一发生变化,我们如何开始部署这个合并的 docker 组合文件?
我们知道这些问题可能不是很具体,但它们显示了我们对此主题的困惑。
对于如何编排这三个服务组件,您有什么好的做法吗?
好吧,一种方法是将 3 个部署设为独立的管道,这样作为每个应用程序的最后一步,您只需调用特定的部署即可。例如后端:
stage("deploy backend") {
steps {
build 'deploy backend'
}
}
然后一个单独的管道来部署所有正在做的应用
stage("deploy all") {
steps {
build 'deploy backend'
build 'deploy frontend'
build 'deploy admin frontend'
}
}
悬而未决的问题是你会把 docker-compose.yml
放在哪里?
我假设自动部署仅适用于您的主人,所以我会在每个项目中保持它不变。您还需要用于部署管道的额外 Jenkins 配置文件 - 这意味着您将有一个简单的管道 'deploy backend' 指向 'backend' 主分支中的这个新的 jenkins 配置文件。但这一切都取决于你的 gitflow。
我们正在开发一个由三部分组成的应用程序:
- 后端(Java EE)(A)
- 前端 (vuejs) (B)
- 管理前端 (React) (C)
以上每一项都适用于现状:
- 在自己的 Git 存储库中维护
- 有自己的
docker-compose.yml
- 有自己的
Jenkinsfile
每个组件的 Jenkinsfile
包含一个 "Deploy" 阶段,基本上只运行以下命令:
docker stack deploy -c docker-compose.yml $stackName
.
然而这种方法感觉不到 "right"。我们正在努力解决一些问题,例如:
- 我们如何部署 "complete application"?第一个猜测是使用单独的
docker-compose.yml
,其中包含 A、B 和 C 的服务。 - 但是我们要把这个文件放在哪里呢?绝对不在 Git 回购协议之一中,因为它不属于那里。第四个回购协议?
- 如果 A、B、C 的上述存储库之一发生变化,我们如何开始部署这个合并的 docker 组合文件?
我们知道这些问题可能不是很具体,但它们显示了我们对此主题的困惑。
对于如何编排这三个服务组件,您有什么好的做法吗?
好吧,一种方法是将 3 个部署设为独立的管道,这样作为每个应用程序的最后一步,您只需调用特定的部署即可。例如后端:
stage("deploy backend") {
steps {
build 'deploy backend'
}
}
然后一个单独的管道来部署所有正在做的应用
stage("deploy all") {
steps {
build 'deploy backend'
build 'deploy frontend'
build 'deploy admin frontend'
}
}
悬而未决的问题是你会把 docker-compose.yml
放在哪里?
我假设自动部署仅适用于您的主人,所以我会在每个项目中保持它不变。您还需要用于部署管道的额外 Jenkins 配置文件 - 这意味着您将有一个简单的管道 'deploy backend' 指向 'backend' 主分支中的这个新的 jenkins 配置文件。但这一切都取决于你的 gitflow。