【问题标题】:Automatic deployments with Gitlab (and possibly Ansible)使用 Gitlab(可能还有 Ansible)进行自动部署
【发布时间】:2016-12-28 01:00:25
【问题描述】:

感谢您花时间阅读我的问题。我正在寻找新工作流程的经验指导。我最近一直在更新东西,并为一些 devops 任务添加了 Ansible,并将我们的 repos 移动到专用的 GitLab 服务器。

当前节点

  • 5 台生产服务器
  • 2 个开发服务器
  • 2 个数据库服务器
  • 1 个专用 Gitlab 服务器托管所有站点的存储库
  • 1 Ansible 控制服务器(所有盒子都在库存中)

我想要完成的是一个自动化过程,但我不确定我是否应该使用标准的 webhook、运行程序,或者是否应该连接到我们的 Ansible 控制服务器来管理部署任务。

基本上,每个 repo 都有一个 master(生产)和 develop(开发)分支。我想在有人推送到此分支时自动部署 develop 分支。此外,当合并请求被批准并合并到我们的生产线时,我想手动将master 部署到生产中。

我是 Ansible 的新手,现在可以很好地处理 devops 任务,但不确定它在 Git 和像我这样的情况下的潜力。来自有经验的人的任何指导都将非常有帮助和最感激。

【问题讨论】:

  • 你确定这篇文章(我什至不会称之为问题)不符合don't ask section中列出的标准吗?甚至他们中的大多数?
  • 为您的业务需求设置个人 CI/CD 对于 SO 问题来说相当广泛。
  • 我不是在寻找一个冗长的答案,而是更多关于将 Ansible 与我的 git 工作流一起使用的可行性(或缺乏可行性)的有根据的回答。
  • 是的:完全有可能。
  • 我今天早上使用 Ansible 发现了 CI。所以...一如既往的有用,哈哈。

标签: git deployment ansible gitlab


【解决方案1】:

我们使用 ansible 在各种服务器上进行部署。 Ansible 与 git 有很好的集成,git 是 Ansible 中的内置模块。您所需要的只是在您的 ansible playbook 中添加一些像这样的 sn-p:

- git: repo=<your_git_repo> dest=<destination_directory_for_code> clone=yes version={{ branch_name }} depth=1
  tags:
   - <any_tags>
  sudo: no

根据我的经验,我可以告诉你两件事:

  1. 仅部署所需的分支而不克隆整个 repo 会有所帮助,尤其是当 repo 很大时。 (如上代码所示)

  2. 使用 depth=1 指定您基本上只保留最后一次提交的提交日志。这不仅有助于保持克隆的大小更小,而且还有助于了解最后一次提交是什么,以便确定部署的代码是否正确。

在自动部署部分,您可以在 CI 上保留相同的脚本,可能是 jenkins/bamboo/travis ci/任何其他 ci,以保持轮询特定分支以获取相同部署作业中的任何更改。每个 ci 都与 git 很好地集成(例如 Jenkins git 插件)。

我很幸运 google 搜索结果显示 Example Provisioning and Deployment using ANsible,我觉得这很有趣。

我会推荐你​​阅读一个非常广泛的 ansible 文档。我个人使用 ansible 命令行文档本身:)

希望这会有所帮助。

编辑: 我忘了补充一点,git 插件与 github/gitlab/bitbucket 配合得非常好,所以你可以在 ci 中使用 git 插件 for gitlab 没有任何问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2014-03-22
    • 2018-10-24
    • 2021-10-17
    • 2014-05-28
    • 2016-03-29
    • 2015-12-08
    相关资源
    最近更新 更多