我正在为capistrano 3编写任务,我需要获取当前的提交sha1。我该怎么读?那有变量吗?
我在某些文件中看到了fetch(:sha1)
,但这对我来说并不适用。
我正在部署到一个docker容器中,我需要使用当前sha1标记图像(理想情况下,如果已经存在与当前sha1相对应的图像,则跳过部署)
答案 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插件中调用正确的任务