Capistrano得到git commit sha1

时间:2016-12-07 01:17:44

标签: capistrano3

我正在为capistrano 3编写任务,我需要获取当前的提交sha1。我该怎么读?那有变量吗?

我在某些文件中看到了fetch(:sha1),但这对我来说并不适用。

我正在部署到一个docker容器中,我需要使用当前sha1标记图像(理想情况下,如果已经存在与当前sha1相对应的图像,则跳过部署)

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

Capistrano 3使用的插件系统用于所使用的版本管理器应用程序(git,svn等)

current_revision被委托给版本管理器插件,我不明白如何访问它...

与此同时,一个肮脏的解决方案将是

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

但我正在等待一个好的解决方案,而是设法从SCM插件中调用正确的任务