使用Capistrano部署远程Git仓库,但生产服务器上不运行Git

9

我在团队内部建立了一个远程git仓库,用于集中式开发。然而,我们目前用于部署应用程序的生产服务器上并没有运行git。我们想使用capistrano来部署应用程序,该如何设置我们的部署脚本以从远程git仓库“拉取”代码?

换句话说,我能否像这样做?

set :repository, "myserver.com/git/#{application}.git"
set :scm, "git"
set :deploy_via, :copy
2个回答

16

你的问题中的解决方案基本正确。但是,你需要以稍微不同的方式指定你的git仓库。你需要:

set :repository, "someuser@somehost:/home/myproject"
set :scm, "git"
set :deploy_via, :copy

在 Capistrano gem 的 lib/capistrano/recipes/deploy/scm/git.rb 下有更多设置 git 部署的示例。

当使用 copy 部署策略时,Capistrano 会将你的 git repo 克隆到本地机器上的 /tmp 目录中,将结果打包并压缩成 tar 文件,然后通过 sftp 将其传输到服务器。复制策略还支持通过 scp 进行复制,但没有办法在不对源代码进行一些操作的情况下告诉它这样做。


0

你尝试过类似这样的东西吗?

set :repository, "myserver.com/git/#{application}"
set :scm, :none
set :deploy_via, :copy

我从未尝试过这个,但这似乎是你需要采取的方法。在Capistrano RDocs中可以获得更多的见解。


我赞同这个观点。使用:copy是你唯一的选择,除非你在服务器上安装git客户端。 - Mark S.
如果将“scm”设置为“none”,它将只是压缩本地机器上的任何内容并将其传输到服务器,而不是在本地进行git克隆并传输。 - Emily
3
仔细看后,那个方法行不通。当你将“scm”设为“none”时,“repository”应该是一个目录路径,而不是一个URL地址。你的解决方案会在本地机器上寻找名为“myserver.com”的目录。通常,当“scm”为“none”时,你应该将“repository”设为“'.'”。 - Emily

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接