在 Docker 容器中获取和显示 Git 部署版本号的折腾记录
昨天晚上,我准备给我的 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
