Golang 在编译时注入版本信息
Golang 如何在编译时注入版本相关元信息, 如 git commit hash, git tag, 构建时timestamp 等
方法一: 使用 -ldflags
package version
var (
Commit string
)
go build -ldflags="-X app/package/version.Commit=$(git rev-parse HEAD)"
通常配合Makefile等构建工具
方法二: Go1.18以上时, 使用 debug.ReadBuildInfo()
var Commit = func() string {
if info, ok := debug.ReadBuildInfo(); ok {
for _, setting := range info.Settings {
if setting.Key == "vcs.revision" {
return setting.Value
}
}
}
return ""
}()
问题
CICD平台使用时, 由于是在容器中进行构建, 此时需要在镜像构建时注入信息
...
ARG VERSION
ENV VERSION $VERSION
ARG BUILD_TIMESTAMP
ENV BUILD_TIMESTAMP $BUILD_TIMESTAMP
...
docker build -t "$TAG" -t "$LATEST" --build-arg VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" .