LoginSignup
1
1

More than 3 years have passed since last update.

Golang - Github ActionsでDocker ImageをBuild & Push

Last updated at Posted at 2020-11-03

内容

Golangで作ったアプリのDockerイメージを作成し、Dockerレジストリにpushする。
Golangアプリ用のDockerfileはこちら

Github Actionsのyaml構文のドキュメント

目次

  • ワークフローファイル
  • 内容の捕捉

ワークフローファイル

ci.yaml
name: CI
on:
  push:
    tags:
      - "v*.*.*"

jobs:
  test:
    runs-on: ubuntu-18.04
    strategy:
      matrix:
        go: ["1.15"]
    steps:
      - name: Check out source code
        uses: actions/checkout@v1

      - name: Set up Go v${{matrix.go}}
        uses: actions/setup-go@v2
        with:
          go-version: ${{matrix.go}}

      - name: Install dependent packages
        run: go mod download

      - name: Run all test
        run: go test -v ./...

  docker-build:
    needs: ["test"]
    runs-on: ubuntu-18.04
    env:
      DOCKER_IMAGE_NAME: docker-app
    steps:
      - name: Check out source code
        uses: actions/checkout@v1

      - name: Build and push docker image
        run: |
          TAG=$(echo $GITHUB_REF | grep -o "[0-9][\.].*")
          DOCKER_IMAGE=${{ secrets.DOCKER_REGISTRY }}/${DOCKER_IMAGE_NAME}:$TAG
          echo "Docker image: ${DOCKER_IMAGE}"
          docker login --username ${{ secrets.DOCKER_USERNAME }} --password ${{ secrets.DOCKER_PASSWORD }}
          docker build -t $DOCKER_IMAGE .
          docker push $DOCKER_IMAGE

内容の捕捉

ワークフローのトリガー - on.push.tags

Github Actionsのトリガーはonの後に書くことでトリガーとして登録されます

今回は、タグ v1.0.0 のような形式のタグがpushされた時にCIパイプラインが実行されるようにしています。

push以外にもPRのオープンなどの多くのGithub Actionsのトリガーがあります。

テスト - jobs.test

jobsという単位でジョブを作成していきます。
ここではテストのジョブを実行しています。

  1. ソースコードのチェックアウト
  2. Golangのバージョンを指定 (今回は1.15を指定)
  3. go modulesに従って依存パッケージをインストール (go mod download)
  4. ワーキングディレクトリ内のすべてのテストを実行 (go test -v ./...)

イメージのビルドとプッシュ - jobs.docker-build

jobsという単位でジョブを作成していきます。
ここではビルドとプッシュのジョブを実行しています。

認証情報はsecretを使っています。
secretに関しては、下のドキュメントが参考になります。
https://docs.github.com/ja/free-pro-team@latest/actions/reference/encrypted-secrets

  1. イメージtagをgit refから作成している (例 v1.0.0 -> 1.0.0)
  2. Dockerイメージ名を作成 (レジストリ名はsecret,イメージ名はenv,タグ名は1で作成したもの)
  3. dockerにログイン (usernameとpasswordはsecret)
  4. docker build (Dockerイメージ名は2で作成したもの)
  5. docker push
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1