2016-12-07 68 views
0

我正在爲capistrano 3寫一個任務,我需要獲取當前提交的sha1。我怎麼讀?有沒有一個變量呢?Capistrano得到git commit sha1

我在某些文件中看到了fetch(:sha1),但這對我不起作用。

我部署到一個碼頭工人的容器,我需要標記與當前SHA1圖像(理想情況下,跳過部署如果已經有對應於當前SHA1的圖像)

回答

1

Capistrano的創建一個文件在包含git修訂版的已部署文件夾中。在查看創建該文件的任務時,我們可以看到它如何獲得修訂:https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/deploy.rake#L224

因此,它從fetch(:current_revision)獲取修訂。

在GIT特定的任務,我們可以看到它被設置:https://github.com/capistrano/capistrano/blob/master/lib/capistrano/scm/tasks/git.rake#L62

作爲一個方面說明,Capistrano的可能是不適合你正在嘗試做的最好工具。 Capistrano對重複部署到同一臺服務器很有用。 Docker實質上是構建一個已經包含代碼的可部署容器。看到這裏回答更多細節:https://stackoverflow.com/a/39459945/3042016

+0

謝謝。我確實看到了這些答案,但我相信我的流程與他們的流程有一點不同。我首先在卡皮斯特拉諾之外建立一個沒有應用程序的「基本形象」。然後我部署到一個容器,從這個圖像與帽子開始。進一步的部署也對同一個容器進行加速,即。重複部署到同一個容器。 每個新部署我還提交了一個新映像,我可以將它推送並部署到我的ECS羣集。聽起來像Capistrano的合理使用? –

+0

呵呵。我從來沒有聽說過這個工作流程。我不是Docker的專家/用戶,所以我不能評論它是否是「正確」的做法。 –

+0

雖然'fetch(:current_revision)'回答你的問題嗎? –

0

Capistrano的3使用的插件系統使用的版本管理器應用程序(GIT,SVN等)

current_revision被委派到版本管理工具插件,我不「不懂如何訪問它...

同時骯髒的解決辦法是

set :current_revision, (lambda do 
    `git rev-list --max-count=1 #{fetch(:branch)}` 
end) 

但我在等待一個很好的解決方案,反而會,設法調用從右邊的任務SCM pl ugin