Goプロジェクト用GitLab CIパイプライン
vet、レースディテクション付きテスト、静的バイナリビルドを含むGoプロジェクト用GitLab CI設定。高速ビルドのためのモジュールキャッシュを含みます。
Language Pipelines
詳細な説明
GitLabでのGo CIパイプライン
Goプロジェクトはモジュールキャッシュと、単一ファイルのアーティファクトとしてデプロイできる静的バイナリの生成機能を活用できます。
パイプライン設定
stages:
- lint
- test
- build
variables:
GOPATH: "$CI_PROJECT_DIR/.go"
GOFLAGS: "-mod=readonly"
vet:
stage: lint
image: golang:1.22-alpine
script:
- go vet ./...
cache:
key: go-modules
paths:
- .go/pkg/mod/
policy: pull-push
test:
stage: test
image: golang:1.22-alpine
script:
- go test -race -coverprofile=coverage.out ./...
- go tool cover -func=coverage.out
cache:
key: go-modules
paths:
- .go/pkg/mod/
policy: pull-push
build:
stage: build
image: golang:1.22-alpine
script:
- CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o app ./cmd/server
cache:
key: go-modules
paths:
- .go/pkg/mod/
policy: pull
artifacts:
paths:
- app
expire_in: 1 week
主要なポイント
GOPATHのリダイレクト: Pythonのpipキャッシュと同様に、GOPATHをプロジェクトディレクトリ内に設定することで、パイプライン実行間でモジュールキャッシュが可能になります。
-raceフラグ: レースディテクターはテスト時に並行アクセスのバグを検出します。
静的バイナリ: CGO_ENABLED=0はC言語ライブラリ依存関係のない完全な静的バイナリを生成します。scratchやdistrolessのDockerイメージに最適です。
ユースケース
Goマイクロサービス、CLIツール、ライブラリに適しています。静的バイナリ出力は、最小限のDockerイメージやサーバーレスプラットフォームへのデプロイに直接使用できます。