如何结合Ansible在Git中配置/描述web应用程序的部署



我想直接从Git存储库部署几个web应用程序

一个web应用程序由两个docker容器组成,一个用于Apache Tomcat(作为中间件并用于提供静态文件,例如Vue.js前端(和一个Mysql数据库容器。

Ubuntu服务器本身将使用Ansible剧本从头开始初始化,该剧本提供例如docker/docker compose和预配置的Apache web服务器,该服务器将用作所有web应用程序的反向代理(它们是Apache web服务器的虚拟主机(。

Ansible的第二个剧本是通过在Ubuntu服务器上创建一个新用户,从Git服务器克隆网络应用程序的存储库,并在Apache网络服务器上配置反向代理来安装网络应用程序。

有没有一个好的方法来配置/描述web应用程序在其Git存储库中的部署?这个描述应该包括例如docker compose文件的名称,如何构建中间件软件的war文件,相对于Ubuntu服务器中web应用程序用户的主目录,在哪里部署war文件等等。有人偶然知道是否有标准化的方法来实现我的目标吗?

我认为,通常的方法是使用CI/CD环境。

Git正在存储您的项目的源代码。每次提交(或在您想要的任何事件上(,Continous集成过程都会启动并根据需要编译源。在特定分支(主/生产(的情况下,CI/CD过程会创建一个工件,该工件被打包到Docker映像中并推送到注册表。所有这些都不是在服务器上完成的,而是在另一台机器上完成的——不要使用Ubuntu生产机器来编译网络应用程序。。。

然后,CI/CD进程可以直接在远程计算机上启动发布进程,也可以调用可执行的剧本(例如生成ReverseProxy设置(。因此,您已经将编译过程与配置完全分离。该剧本可能是该项目的一部分。

Gitlab和Jenkins有几个可用的例子-看看https://docs.gitlab.com/ee/ci/docker/using_docker_build.html例如

每个项目都有自己的Dockerfile来描述服务本身。还有一个整体项目,使用Docker Compose文件,也许还有Ansible脚本来生成生产环境(通常(。每个服务的配置是使用每个SCM项目的剧本来完成的。

在一个项目中更改一个文件将重新创建Docker映像。你只需要调用一个docker composepull&up-d(也许您不需要重新运行完整的docker-compose-Create过程(。另一个任务可以自动运行,也可以在任何更改时运行。我认为,诀窍是在这里使用Docker容器而不是Ansible脚本,因为你已经使用了Docker编写环境——完全使用它。

所以-你有(例如(

  • 开发主机
    • Gitlab容器与Gitlab Runner容器
      • 每个项目都有一个CI配置来描述从源到工件的任务(请参见.gitlab CI.yml(
      • 描述映像及其配置/启动/健康检查的Dockerfile
      • 也许还有一个由.gitlab-ci.yml运行的剧本来配置ReverseProxy等
      • 一个不同的项目,带有库存和通用剧本,为您的环境创建默认设置(在我的情况下,对该项目的推送会调用AWX REST API来重读SCM并启动剧本网站.yml(
    • 也许是Docker注册表
    • 也许在它前面有一个ReverseProxy
  • 你的生产机器
    • 反向代理
    • 几个Docker使用注册表中的Docker映像组成环境

好的是,与AWX和其他一些主机一起,您可以为不同的分支和新项目创建临时区域,并使用基于时间的部署。

当然-用你想要的任何东西替换Gitlab。

最新更新