如何使用Capistrano部署针对特定提交SHA的代码?

39

我想知道如何在使用Capistrano进行部署时,针对Git中特定的提交SHA进行目标定位?应该是这样的:

cap deploy --version=<sha targeted>

在进行了大量搜索后,似乎找不到这个问题的答案。

4个回答

64

对于使用 Capistrano 2.9 到 3.0 的用户:

cap -S revision=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy

对于旧版本的Capistrano,你可以通过以下方式部署特定的git提交/树/分支/标签:

cap -s branch=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy
在某些情况下,可能需要将环境作为参数进行指定。`production` 只是一个示例。
cap production -S revision=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy

这是特定提交的SHA吗? - Scott Miller
1
分支将通过 "git checkout <branch>" 传递给 git,因此提交 ID 应该与树 ID、分支名称等一样有效。 - molf
这个答案对我不起作用,请参考 @eahanson 的答案。 - Siwei
原始答案相当陈旧,已更新以反映Capistrano的变化。 - molf
5
请参考这个问题来使用 Capistrano 3 部署特定版本:https://dev59.com/WWEi5IYBdhLWcg3wsODc - KIR
1
set :branch, 'SHA' 在 Capistrano 2 和 3 中均可通用。 - Ev Dolzhenko

17

molf的回答对我没有用(使用capistrano 2.11.2)。我必须使用“revision”而不是“branch”,像这样:

cap -S revision=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy

在2.14.2中工作100%正常。 - RidingTheRails
3
好的,2.11.2比2.9高,并且你使用了针对高于2.9版本的语法。我有遗漏什么吗? - kik
@kik molf在我的评论后更改了答案。 - eahanson

14

Capistrano 3

在您的deploy.rb文件或类似于config/deploy/production.rb的特定于阶段的文件中。

set :branch, ENV.fetch('REVISION', 'master')

这允许您指向特定的git修订版本。它接受SHA,但也可以接受任何能够解析为真实修订版本的内容(例如git标签、注释标签或分支)。

通过设置 REVISION 环境变量在命令行上使用它,例如:

bundle exec cap production deploy REVISION=80655da8d80aaaf92ce5357e7828dc09adb00993

bundle exec cap staging deploy REVISION=my-topic-branch

有没有办法将分支作为命令行参数传递? - marcovtwout
我不知道如何做到那样。 - Alexander Popov
1
@marcovtwout 是的,那是可能的,请查看更新的答案。 - Dennis

1

要求输入分支名称,如果按回车则默认为'master'。


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