2

我是 Capistrano 的新手,开始有点挣扎。简要说明我需要做什么:

  • git pull来自我们 git repo 的最新代码,位于中央构建服务器上。此构建服务器的环境与部署环境完全匹配。我需要在这里构建代码。例如,我不想部署在 Mac 笔记本电脑上构建的二进制文件。
  • 在这台机器上编译二进制文件。
  • 将它从这台机器部署到所有目标机器。
  • 有一个共享用户,我们都可以在构建机器上通过 SSH 访问来进行构建。
  • 构建机器位于网关机器后面,不能直接访问。
  • 所有部署目标机器也有这个共享用户并且也在网关后面。
  • 部署的二进制文件是单个可执行文件,目标机器上有一个初始化脚本。部署二进制文件并更改符号链接后,通过 init 脚本重新启动服务。
  • 每个人都有适当的 SSH 密钥和代理转发来完成所有必要的任务。

所以原则上它看起来相当简单,但 Capistrano 似乎固执己见而且有点神奇。结果,我不确定如何完成所有这些。似乎它想检查我的代码并将其复制到远程机器上,例如不先构建它。

我想我需要忽略 Capistrano 的所有默认智能,并让它在适当的服务器上运行一些 shell 命令。在伪代码中:

  • ssh buildmachine via gateway "cd repo && git pull && make"
  • ssh targetmachine(s) via gateway "scp buildmachine:repo/binary .; <mv && symlink>; service foo restart"

我是否使用了正确的工具来完成这项工作?它看起来很像方孔中的圆钉。

有人可以向我解释 Capistrano 配置文件的内容应该是什么,以及cap我将运行哪些命令来完成此操作?

顺便说一句,我四处搜索并查看了诸如使用远程 git repo 部署 capistrano 但没有在生产服务器上运行 git以及从服务器上手动拉取到 Capistrano 等问题

4

1 回答 1

1

这个问题相当古老,但你永远不知道什么时候有人踏上它需要信息......

首先,考虑到 Capistrano 可能不是您想做的工作的正确工具。

也就是说,实现您的期望并非不可能。在部署大量文件并修改它们的项目中(如 css/js 缩小、js 构建等)我会避免它,在您的情况下,您可以考虑运行“部署存储库”并在 capistrano 中将其配置为源. 您的流程如下所示:

  • 使用您需要的任何工具运行本地构建
  • 将生成的二进制文件上传到部署存储库
  • 运行将连接到应用程序服务器的 capistrano,从存储库中获取新的二进制文件,执行所需的任何服务器端任务并符号链接到“当前”

作为副作用,您最终会获得已部署二进制文件的完整历史记录

于 2014-07-24T07:11:44.843 回答