昨天晚上,我准备给我的 CMS 添加显示 deploy git hash 的功能,方便跟踪当前博客部署所使用的最新提交 hash,以判断是否需要更新,或者更新是否成功。
最开始,我直接执行 git 命令获取 HEAD 所在的 hash 值(commit):
最开始,我直接执行 git 命令获取 HEAD 所在的 hash 值(commit):
def self.git_version
@git_version ||= `git rev-parse HEAD`.strip[0..7]
end
但又失败了:
fatal: not a git repository (or any of the parent directories): .git
我忘记 Dockerfile 中的 COPY 命令默认是不会复制 .git 目录的。
所以最后决定直接在 Dockerfile 中执行命令并输出 hash 到 REVISION 文件中,然后 Rails 直接读取该文件即可。
Dockerfile 添加了下面的代码:
所以最后决定直接在 Dockerfile 中执行命令并输出 hash 到 REVISION 文件中,然后 Rails 直接读取该文件即可。
Dockerfile 添加了下面的代码:
COPY .git /rails/.git
RUN git rev-parse HEAD > REVISION && \
rm -rf .git
RUN chown -R rails:rails REVISION
重新 git_version 函数:
def self.git_version
@git_version ||= begin
if File.exist?("REVISION")
File.read("REVISION").strip[0..7]
else
"NA"
end
end
end
最后在相关的 html.erb 文件中添加:
<span>Depoly Git Hash: <%= VersunCms::Application.git_version %></span>
效果如下
deploy git hash