2013-10-18 36 views
0

我想添加一個鉤子,記錄一些事情的效果,「嘿,我即將部署這樣的提交。」喜歡的東西:提交將要部署的修訂版本的散列?

before "deploy:update_code" do 
    logger.info "Deploying #{revision}" 
end 

除非在本文中,「版本」似乎產生REF名字(即,「主」),而不是一個提交ID。我可以使用什麼構造來獲取sha1?

回答

1

爲了得到裁判,你需要掏出來的Git:

下面是我自己的項目,其中master完全處於最新推,我clean_architecture分支ISN的一個例子「T。

~/api git:(clean_architecture) $ git show-ref master 
349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/heads/master 
349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/remotes/origin/master 
~/api git:(clean_architecture) $ git show-ref clean_architecture 
14afae560ace128a13336ca01ff2391b678fadaf refs/heads/clean_architecture 
bc78906ad0b2814dbc6225b2e14155b66eedffd0 refs/remotes/origin/clean_architecture 

考慮的是板載,我建議像下面這樣搶遠程推裁判哈希(因爲這是唯一一個Capistrano的3可以看出,Capistrano的會做這樣的檢查在內部,但你不能訪問裁判,並會抱怨,如果這兩個值不同,反正)

首先,在命令行:

$ git show-ref clean_architecture | tail -1 | cut -f1 -d ' ' 
bc78906ad0b2814dbc6225b2e14155b66eedffd0 
$ git show-ref clean_architecture | tail -1 | awk '{print $1}' 
bc78906ad0b2814dbc6225b2e14155b66eedffd0 

(有大約一百萬的方式做到這一點在Linux上)

其次在Ruby中:

$ irb --simple-prompt 
>> `git show-ref #{fetch(:branch)}` 
=> "349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/heads/master\n349dabbffec0713ac0fc70cf991dbaff6412ad2b refs/remotes/origin/master\n" 

這讓我們知道我們可以在Ruby中的土地確實容易裂開這件事,而不是需要cutawk

$ irb --simple-prompt 
>> `git show-ref #{fetch(:branch)}`.split.first 

這應該是八九不離十,漂亮(如cutawk,並在管道中拆分,在Windows中等是相當* nix特定的,並且不太可能在Windows上正常工作)

Drop tha t在你的before任務中,你應該設置。

+0

謝謝,我喜歡它。我還發現了一個名爲「real_revision」的預定義變量(在Capistrano 2.5.17中),似乎可以做到這一點。有沒有理由不使用它? – gcbenison