Capistrano 得到 git 提交 sha1

Capistrano get git commit sha1

我正在为 capistrano 3 编写任务,我需要获取当前提交的 sha1。我怎样才能读到它?有一个变量吗?

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

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

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 本质上是构建一个已经包含代码的可部署容器。有关更多详细信息,请参阅此处的答案:

Capistrano 3 正在为所使用的版本管理器应用程序(git、svn 等)使用插件系统

current_revision委托给了版本管理器插件,我不知道如何访问它...

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

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

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