在使用gitlab过程中,我发现如果能直接将gitlab的tag与自动生成的软件版本做成一致的话,在后续的维护上会更加方便.于是研究了一番如何将tag作为版本号硬编译进程序中的方法.主要是一下几个方面:
-
在gitlab-ci.yml中,通过
only: - tags
指定只对tag生效
- gitlab-ci.yml中内置 $CI_COMMIT_REF_NAME 得到当前的tag
使用c++
-
生成version.h文件,在gitlab-ci.yml中
- echo "#pragma once" > inc/version.h - echo "#define __VERSION__ \"$CI_COMMIT_REF_NAME\"" >> inc/version.h
-
在代码中通过 #include "version.h" 并使用 __VERSION__ 宏来操作版本号
使用go
可以使用类似c++的方式,生成version.go文件来实现,也可以编译命令中直接修改源文件中指定的值,比如:
version.go中:
package version
var Version = "unknown"
那么在gitlab-ci.yml中就可以
go build -ldflags "-X version.Version '$CI_COMMIT_REF_NAME\'"
即可将Version修改为当前tag
网友评论