从 repo 和 Ansible 部署代码的最佳方式是什么?
What is the best way to deploy code from a repo and Ansible?
对于我们的电子商务网站,我使用以下 Ansible 部署过程:
- 从存储库中拉取源代码到远程机器
- 此存储库的符号链接到
/var/www/mysite/current
- 配置文件的符号链接
但我不确定这是部署代码的最佳方式,因为我们可以在远程中拥有所有存储库,其中包含不需要的文件。
所以我想知道是否更好:
- 在本地拉取代码(例如在 tmp 中)
- 在
/var/www/mysite/release/xxxxxxx
中制作存档并直接上传到远程
- 发布到当前的符号链接
你怎么看?有没有办法用 Ansible 做到这一点?
谢谢。
在不知道部署环境的所有复杂性的情况下是否可以 "best" 回答是一个棘手的问题。话虽这么说,我会根据你所说的考虑几件事:
为什么部署整个 repo 是个问题?
您是否正在存储不以任何方式与您的代码交互的大型二进制文件?您可能需要考虑将它们拆分到另一个存储库中,或者以不同的方式管理它们(例如,大型磁盘映像可以由构建系统提供服务,而不是保存在 git 中)。包含这些其他组件的子模块也可能是一种有用的方法,因为如果需要,可以在不拉入子模块的情况下克隆存储库。
或者 git 存储库的大量历史导致克隆很大?在那种情况下,你可以做一个浅克隆,Ansible 的 git 模块支持。
存档和复制
这听起来像是一个比实际需要更复杂的解决方案。
据推测,这将涉及在 Ansible 存储库中保留要删除的文件列表(增加 Ansible 代码和目标部署存储库的耦合),将本地克隆协调到临时文件中,删除文件,进行存档,进行远程传输,进行远程解压。
这与简单地调用 Ansible git
子模块形成对比。
我讨厌在不需要的地方增加更多的复杂性。我的目标是最简单的方法。
对于我们的电子商务网站,我使用以下 Ansible 部署过程:
- 从存储库中拉取源代码到远程机器
- 此存储库的符号链接到
/var/www/mysite/current
- 配置文件的符号链接
但我不确定这是部署代码的最佳方式,因为我们可以在远程中拥有所有存储库,其中包含不需要的文件。
所以我想知道是否更好:
- 在本地拉取代码(例如在 tmp 中)
- 在
/var/www/mysite/release/xxxxxxx
中制作存档并直接上传到远程
- 发布到当前的符号链接
你怎么看?有没有办法用 Ansible 做到这一点?
谢谢。
在不知道部署环境的所有复杂性的情况下是否可以 "best" 回答是一个棘手的问题。话虽这么说,我会根据你所说的考虑几件事:
为什么部署整个 repo 是个问题?
您是否正在存储不以任何方式与您的代码交互的大型二进制文件?您可能需要考虑将它们拆分到另一个存储库中,或者以不同的方式管理它们(例如,大型磁盘映像可以由构建系统提供服务,而不是保存在 git 中)。包含这些其他组件的子模块也可能是一种有用的方法,因为如果需要,可以在不拉入子模块的情况下克隆存储库。
或者 git 存储库的大量历史导致克隆很大?在那种情况下,你可以做一个浅克隆,Ansible 的 git 模块支持。
存档和复制
这听起来像是一个比实际需要更复杂的解决方案。
据推测,这将涉及在 Ansible 存储库中保留要删除的文件列表(增加 Ansible 代码和目标部署存储库的耦合),将本地克隆协调到临时文件中,删除文件,进行存档,进行远程传输,进行远程解压。
这与简单地调用 Ansible git
子模块形成对比。
我讨厌在不需要的地方增加更多的复杂性。我的目标是最简单的方法。