LoginSignup
19
10

More than 3 years have passed since last update.

Github ActionsでGoのCI環境を作成する

Last updated at Posted at 2020-08-10

はじめに

みなさんCIしてますか?
ちなみに僕はCIは大好きですが、それの環境構築をするのは大嫌いです。
毎回細かい設定をしたり、ごちゃごちゃといろんなことをやらなければいけないのは本当に憂鬱です。
ということで今回は新しくサービスを作成するときに必要であろうGoのアプリケーションのCIをGithub Actionsで簡単にやりたいと思います!

Github Actionsについて簡単に、、、

Github ActionsはGitHubが2019年11月に正式に公開したGitHub上のリポジトリやイシューに対するさまざまな操作をトリガーとしてあらかじめ定義しておいた処理を実行できる機能です。
これまでの

  • Circle CI
  • Jenkins

の兄弟みたいな物だと思ってもらえるといいと思います!

またGithub Actionsは .github/workflows/配下にymlファイルを作成することで処理を実行してくれます

├── .github
│   └── workflows
│       └── ci.yml

今回のゴール

今回はあくまで最低限のci環境を構築するだけなのでやることは

  • buildできる
  • lintを通す
  • testを通す

この3つだけです!
もちろんこのあとDockerHubにあげたり、リリースまで行ったりと、やれることはたくさんあると思いますがいったん今回は省略です。

Actionを実行するファイルの実装

ci.yml
name: go-ci

on: [push]

jobs:
  # 共通処理
  setup:
    runs-on: ubuntu-latest
    steps:
      - name: set up
        uses: actions/setup-go@v2
        with:
          go-version: ^1.13
        id: go
      - name: check out
        uses: actions/checkout@v2

      # 処理を高速化するために環境をキャッシュ
      - name: Cache
        uses: actions/cache@v2.1.0
        with:
          path: ~/go/pkg/mod
          key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
          restore-keys: |
            ${{ runner.os }}-go-

  # buildテスト
  build:
    needs: setup
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: build
        run: go build ./...

  # testを通す
  test:
    needs: setup
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: test
        run: go test ./... -v

  # lintを通す
  lint:
    needs: setup
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v2
        with:
          version: v1.29

パッと見かなりいろんなパラメータがあって0から全てを作っていくのはとても難しそうなイメージがありますが、、、
実はそんなことありません。Github Actionsは既にかなりの数のテンプレートが存在するので基本的にそれらのテンプレを組み合わせるだけです。
(上記のコードもほぼそれらのテンプレートをそのまま使っています。)

具体的には、、、
# 共通処理 -> setup-go
# 処理を高速化するために環境をキャッシュ -> actions/cache
# lintを通す -> golangci/golangci-lint-action

を参考にしています。
(build, test処理はGoの標準コマンドを活用しているので省略します)

上記actionsでやってることとしては、、、
# 共通処理となってるところでgoの環境のセットアップ

共通処理終了後build, test, lintの処理を並行で実行

というような感じです

スクリーンショット 2020-08-10 18.02.31.png
最終的にプルリクエストを出したときにこのようにワークフローが回っていることが確認できれば成功です!

おわりに

Github Actionsがリリースされてからまだ日が浅いこともありベストプラクティスが確立されてないところや、OSSのスター数がどれも少ないところなど多少不安な点もありつつもCIをもGithub内で完結できるのはとても魅力的ですし、他のCIツールを使ったことがある方であれば学習コストもほとんどかからないと思うので、1度は触った方がいいのかなと思っています。

19
10
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
19
10