【问题标题】:What is the best way to deploy code from a repo and Ansible?从 repo 和 Ansible 部署代码的最佳方式是什么?
【发布时间】:2015-10-07 11:01:32
【问题描述】:

对于我们的电子商务网站,我使用 Ansible 的以下部署过程:

  • 从存储库拉取源到远程机器
  • 此存储库的符号链接到/var/www/mysite/current
  • 配置文件的符号链接

但我不确定这是否是部署代码的最佳方式,因为我们可以将所有 repo 放在遥控器中,并在那里放置不需要的文件。

所以我想知道是否会更好:

  • 在本地拉取代码(例如在 tmp 中)
  • 制作存档并将存档直接上传到远程/var/www/mysite/release/xxxxxxx
  • 发布到当前的符号链接

你怎么看?有没有办法用 Ansible 做到这一点?

谢谢。

【问题讨论】:

  • 我不明白您对当前方法有什么顾虑。为什么你的仓库中有“不需要的文件”?如果不需要它们,请将它们删除..
  • 假设我的仓库中有一个文件夹 webroot 和其他文件夹,其中包含部署和编译工具。如果我拉 repo,这个文件夹也将出现在远程机器上,当我只需要 webroot 并且我无法从 repo 中删除这个文件夹时。

标签: git deployment ansible devops


【解决方案1】:

在不了解部署环境的所有复杂性的情况下是否可以找到“最佳”答案,这是一个棘手的问题。话虽如此,根据您所说的,我会考虑几件事:

为什么部署整个 repo 是个问题?

您是否正在存储不以任何方式与您的代码交互的大型二进制文件?您可能需要考虑将它们拆分到另一个存储库中,或者以不同的方式管理它们(例如,大型磁盘映像可以由构建系统提供服务,而不是保存在 git 中)。包含这些其他组件的子模块也可能是一种有用的方法,因为如果需要,可以在不拉入子模块的情况下克隆存储库。

或者是 git repo 的大量历史导致克隆很大?在这种情况下,您可以进行浅层克隆,Ansible 的 git 模块支持。

存档和复制

这听起来像是一个比它需要的更复杂的解决方案。

大概这将涉及在 Ansible 存储库中保留要删除的文件列表(增加 Ansible 代码和目标部署的存储库的耦合),将本地克隆协调到临时文件中,删除文件,执行存档,执行远程传输,进行远程解档。

这与简单地调用 Ansible git 子模块形成对比。

我讨厌在不需要的地方添加更多复杂性。我的目标是最简单的方法。

【讨论】:

  • 你是对的,repo 包含应该在另一个 repos 中拆分的文件夹和文件。我将清理它并仅保留 webroot 并仅部署所需的文件。谢谢
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 2016-01-19
  • 2011-05-19
  • 2022-07-22
  • 2018-09-01
  • 1970-01-01
  • 2010-09-05
  • 2023-03-29
相关资源
最近更新 更多