在Docker容器中使用基于Git的版本号自动更新

版权声明

本文出自 “ 幻冥极地 ” 博客 ,作者 小貘 采用 署名-非商业性使用-相同方式共享 协议。转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
https://www.moorehy.com/archives/365

使用基于Git的版本号系统

众所周知,Git提供了一个 describe 工具,可以获取到基于距离最近的 tag 的提交描述,如: v1.0.0-34-g765db67 。这样在开发过程中可以很方便的显示出当前的软件版本信息,便于测试以及版本定位。

常用的命令语句为:

接下来您只需要在 .git/hooks 中实现相应的钩子脚本,即可在每次执行相应操作后更新版本文件,个人实践后较推荐使用 post-commit 这个钩子,这可以保证工作空间中的版本文件内容总是最新的版本号。

另外不推荐将版本文件添加到Repo中,毕竟频繁的版本文件更新对Repo还是挺污染的。所以如果您使用的 CI 部署,可以在部署流程中增加对生成版本文件脚本的调用,从而在部署时基于 Repo 自动生成最新的版本号,供程序使用。

在Docker容器中使用Git版本号系统

这里介绍一个我使用过的实践方法,即在 Docker 编译时将整个 Repo 封装进镜像,从而可以灵活的使用 Git 版本工具生成版本文件。

由于 DockerHub 以及 MicroBadger 等构建服务都会只 clone 一个深度为 1 的 shallow 仓库,故我们需要在定制的 build 脚本中将 Repo 转化为 unshallow 模式,在项目根目录的 hooks/build 文件中添加内容如下:

这样既可以通过 Dockerfile 中添加 ADD . /path/to/project 来讲整个完整的 Repo 封装到镜像中。

实战参考

讲完上述原理,来提供一个实践案例,我在最近的一个开源项目中使用了类似的版本号生成方法,可作为参考,MoEar

发表评论

电子邮件地址不会被公开。 必填项已用*标注