作為一個軟件開發工程師,相信大家經常會遇到設備上的程序有bug需要修改,但是因為程序年代太久遠或源碼分支太多,已經沒辦法知道設備上的程序是在哪一個提交里編譯出來的,這時候查問題是非常困難的。如果沒法確定設備上程序對應的代碼分支,我們能做的就是給設備升級到最新版本,如果新舊版本和設備之間是兼容的那還好辦,要是新舊版本和設備之間是不兼容,那就比較麻煩了,可能需要免費給客戶換一台新的設備。
現在有一個方法可以避免以上的問題,那就是往gitlab編譯出來的每一個程序里寫入commit ID。這樣子就可以把程序與gitlab上的提交記錄聯系起來了,這樣子出現問題我們就可以到對應的提交記錄里看源碼,排查問題。
如何實現把commit ID寫入程序中,以下是golang語言的一個小demo
main.go
package main import ( "flag" "fmt" "os" "runtime" ) var ( ver bool gitDescribe = "should be compiled with make." ) func main() { flag.BoolVar(&ver, "v", false, "show verison info.") // 解析命令行參數 flag.Parse() // 打印git版本、編譯環境信息 if ver { fmt.Printf("%s %s\ngoVersion: %s, compiler: %s, Platform: %s\nCopyright (c) 2000-2019 Sangfor Technologies Inc.\n", os.Args[0], gitDescribe, runtime.Version(), runtime.Compiler, fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH), ) return } }
Makefile
gitDescribe = $(shell git describe --dirty --always --tags) ldflags = "-s -X main.gitDescribe=${gitDescribe} " all: CGO_ENABLED=1 go build -ldflags ${ldflags} main.go
使用:
make 編譯成功后,用./main -v 可查看打進程序中的git commit 的縮寫哈希值
備注:可自行修改,打進程序中的哈希值要不要縮寫
git rev-parse HEAD //獲取HEAD 的commit ID
git rev-parse --short HEAD //獲取HEAD 的commit ID 哈希縮寫
git describe --dirty --always --tags //獲取commit ID 哈希的縮寫