大家好,我从来没有自动设置我的项目的布局,所以我请求帮助组织这一切。
有一个项目,采用 docker-compose 的微服务架构风格,一切都存储在 GitLab 上,存储库如下所示:
- ServiceA——服务A,存放源代码+
Dockerfile
- ServiceB——服务B,存放源代码+
Dockerfile
- ServiceC——服务C,存放源代码+
Dockerfile
git submodules
应用程序 - 使用+列出服务 (ServiceA...C) 本身docker-compose.yml
;
存储库中的所有docker-compose
服务都在中声明(除了它们的“模块”之外,还列出了完成图像中的 docker 服务),因此,要运行应用程序,只需执行docker-compose up -d --build
有2个环境:
- 暂存——验收环境,测试,无 ssh 访问
- 生产 - prod,可以通过 ssh 访问(当然最好不要接触 ssh)
我想做以下事情:
- 当我 update
master
-branch, repositoryApplication
时,更新会自动传递到 Staging 环境并更新应用程序。 - 在 Staging 环境中测试成功后,您可以单击
кнопочку
(确认发布)并将更改交付到 Production 环境(过程类似于 Staging 环境)。
现在是实际问题:)
如何组织这个过程? 也许由于缺乏经验,我错过了一些过程,但应该是。
首先,微服务可以单独部署是可取的。目前的描述中,配置只有在
Application stack
,不够灵活。如果Service A
它改变,它需要改变Application
。解决方案:
docker-compose.*.yml
的描述(包括docker-compose.development.yml
,我们使用docker-compose.override.yml
,建立链接)environment
(直接在服务仓库中)Application
(.gitlab-ci.yml
)SSH 是一个很好的部署选项。最主要的是不是通过ssh手动进行的。
我们在
.gitlab-ci.yml
qa、集成测试、部署中描述为staging
/production
。在这里,您可以放置脚本来自动化部署。让我们举个例子。我的 CD 实现的一些类似物
Application
。看services/example
(模拟Service A
)bash
+用于自动化ansible
。安可:
environment
和机密(最小加密host_vars.yml
)重击:
它看起来像什么:
./build example staging
我们构建服务
example
并将其上传到注册表。请记住,此时需要资源。部署类似。
在引擎盖下,我们有 ansible,我们将密码提供给他以
vault
获取秘密。您可以同时使用group_vars
和host_vars
。docker-compose.yml
我们通过 ansible 将它带入相同的形式,ansible vars
我们已经控制了变量(开发除外)。gitlab 示例
我们将标签推送到 master(设置策略)。开始构建并部署到生产环境。如果可以用简单的命令描述基本的东西,那么一切都很容易实现。
而不是一个结论
主要问题和有什么帮助: