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イメージやサーバーレスプラットフォームへのデプロイに直接使用できます。

試してみる — GitLab CI Config Generator

フルツールを開く