1. ホーム
  2. 行く

[解決済み】アプリケーションの自動ビルドによるバージョン管理

2022-04-09 22:06:54

質問

Goアプリをコンパイルするたびにマイナーバージョン番号を自動的にインクリメントすることは可能ですか?

プログラム内部にバージョン番号を設定し、自動インクリメントする部分を設けたいのですが、可能でしょうか?

$ myapp -version
MyApp version 0.5.132

0.5というのは私が設定したバージョン番号で、バイナリがコンパイルされるたびに自動的に増加する値です。

これはGoで可能なのでしょうか?

どのように解決するのですか?

Goリンカー( 囲碁ツールリンク ) には、初期化されていない文字列変数の値を設定するオプションがあります。

-X importpath.name=value
  Set the value of the string variable in importpath named name to

の値を指定します。 Go 1.5以前は、このオプションは2つの別々の引数を取っていたことに注意してください。 現在は、最初の = 記号で分割された 1 つの引数を取ります。

ビルドプロセスの一部として、これを使用してバージョン文字列変数を設定することができます。この変数は go ツールを使って -ldflags . 例えば、以下のようなソースファイルがあった場合。

package main

import "fmt"

var xyz string

func main() {
    fmt.Println(xyz)
}

次に

$ go run -ldflags "-X main.xyz=abc" main.go
abc

を設定するために main.minversion をビルド時にビルド日時に設定します。

go build -ldflags "-X main.minversion=`date -u +.%Y%m%d.%H%M%S`" service.go

を初期化せずにコンパイルした場合 main.minversion このようにすると、空文字列が含まれるようになります。