【问题标题】:How do I target a specific commit SHA with capistrano deploy如何使用 capistrano deploy 定位特定的提交 SHA
【发布时间】:2010-10-29 09:57:44
【问题描述】:

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

cap deploy --version=<sha targeted>

经过大量搜索似乎无法找到答案。

【问题讨论】:

    标签: ruby-on-rails ruby deployment capistrano


    【解决方案1】:

    Capistrano 2.9 至 3.0:

    cap -S revision=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy
    

    对于旧版本的 Capistrano,您可以通过执行以下操作部署特定的 git commit/tree/branch/tag:

    cap -s branch=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy
    

    在某些情况下,可能还需要将环境指定为参数。 production 只是一个例子。

    cap production -S revision=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy
    

    【讨论】:

    • 是特定提交的 SHA 吗?
    • 分支将通过 "git checkout " 传递给 git,因此提交 id 应该与树 id、分支名称等一样工作。
    • 这个答案对我不起作用,请参阅下面@eahanson 的答案。
    • 对于 Capistrano 3,请看这个问题:stackoverflow.com/questions/21036175/…
    • set :branch, 'SHA' 在 Capistrano 2 和 3 中统一工作
    【解决方案2】:

    molf 的回答对我不起作用(使用 capistrano 2.11.2)。我不得不使用“修订”而不是分支,如下所示:

    cap -S revision=80655da8d80aaaf92ce5357e7828dc09adb00993 deploy
    

    【讨论】:

    • 在 2.14.2 中 100% 正常工作
    • 嗯,2.11.2 高于 2.9,而您使用上述 2.9 的语法。我错过了什么吗?
    • @kik molf 在我发表评论后更改了答案
    【解决方案3】:

    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 是的,这是可能的,请参阅更新后的答案。
    【解决方案4】:

    问:分支,“主人”

    提示输入,但如果按回车,则默认为“主”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2011-12-06
      • 1970-01-01
      • 2014-08-17
      相关资源
      最近更新 更多