在一个Docker Swarm部署中结合多个项目的良好实践?

时间:2019-03-07 08:13:36

标签: docker jenkins docker-compose jenkins-pipeline docker-swarm

我们正在开发一个包含三个部分的应用程序:

  1. 后端(Java EE)(A)
  2. 前端(vuejs)(B)
  3. 管理员前端(反应)(C)

以上情况均适用于现状:

  • 在自己的Git存储库中维护
  • 有自己的docker-compose.yml
  • 有自己的Jenkinsfile

每个组件的Jenkinsfile包括一个“部署”阶段,该阶段基本上只运行以下命令:

docker stack deploy -c docker-compose.yml $stackName

但是,这种方法并不感觉“正确”。我们正在努力解决以下问题:

  • 我们如何部署“完整的应用程序”?首先猜测是使用单独的docker-compose.yml,其中包含A,B和C的服务。
  • 但是我们将在哪里保存此文件?绝对不在Git仓库之一中,因为它不属于该仓库。第四次回购?
  • 如果以上针对A,B,C的存储库之一发生更改,我们如何才能开始部署此组合的docker compose文件?

我们知道这些问题可能不是很具体,但是它们显示出我们对该主题的困惑。

您有没有很好的做法来组织这三个服务组件?

1 个答案:

答案 0 :(得分:2)

好吧,一种方法是使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配置文件-这意味着您将在“后端”的master分支中有一个指向该新jenkins配置文件的简单管道“部署后端”。但这一切都取决于您的gitflow。