使用Capistrano从远程服务器构建和部署

时间:2013-03-27 00:47:15

标签: capistrano

我是卡皮斯特拉诺的新手,并且开始时有点挣扎。我需要做的简要说明:

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

所以原则上看起来相当简单,但卡皮斯特拉诺似乎有些自以为是,有点神奇。结果我不知道如何完成所有这些。它似乎想要检查我的代码并将其复制到远程机器,例如,不首先构建它。

我想我需要忽略所有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命令是什么?

顺便说一下,我一直在四处寻找并查看deploying with capistrano with remote git repo but without git running on production serverFrom manual pull on server to Capistrano等问题

1 个答案:

答案 0 :(得分:1)

这个问题相当陈旧,但你永远都不知道有人在需要信息时会采取行动......

首先和formost,考虑到Capistrano可能不适合你想做的工作。

那就是说,实现你的期望并非不可能。在部署大量文件并修改它们的项目中(比如css / js minify,js build等)我会避免它,在你的情况下,你可以考虑运行一个“部署存储库”并在capistrano中配置它作为源代码。您的流程如下所示:

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

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