【CI/CD】GitHub Actionsに入門する

Contents

初めまして、Actions

いま業務で触りはじめたシステムが、どうもCI/CDにGitHub Actionsを使っていそう。ということでActionsに入門することとなりました。この記事では「GitHub Actionsについて」「Actionsに関する基本的な知識」をまとめます。

GitHub Actions

GitHub上で、プッシュ・Issue・リリースなどのイベントをトリガーに起動し、対応するアクションを組み合わせてワークフローの自動化が行える仕組みです。 ドキュメントや公開されているActionが多数あるため、これらを活用することで簡単に自動化の実装ができます。 

(GitHub Actionsで日々の小さな作業を自動化する | ペパボテックブログ)

言いかえると、CI(ソフトウェアのビルド・テストを自動化することで品質向上、開発効率化を目指す)とCD(CIに加えてリリース・デプロイも自動化する)のための技術です。同様のツールとしては、Circle CIやJenkinsなどがありますね。

また、前にAppVeyorの記事でも紹介しましたが、GitHub Actionsでは自動テスト実行の環境としてLinux、macOS、Windowsという主要OSすべてに対応している点、最大20ジョブを同時に実行できる=実行時間短縮できる点が特徴です。そして何よりの強みは、ソースコードの管理に普段使っているGitHub内で特に切り替えを意識せず使えることでしょう。

ActionとWorkflow

GitHub Actionsでは、実行する処理とその処理を実行する条件を定義したものを「Workflow(ワークフロー)」と呼ぶ。ワークフローはYAML形式で記述し、リポジトリ内の.github/workflowsディレクトリ内に保存することで実行できるようになる。ワークフロー内では、シェル経由で任意のコマンドを実行できるほか、「Action(アクション)」という、あらかじめ定義済みの処理を呼び出せるようになっている。

GitHubの新機能「GitHub Actions」で試すCI/CD | さくらのナレッジ

ワークフローはYAML形式での表現なので、何かこのための特別なプログラミング言語を学ぶ必要がない、というのはイイですね。この学習コストの低さもメリットになりそう。

ここで少し、開発に利用しているフレームワークgo-macaron/macaronのworkflowをのぞいてみます。

name: Goon:  push: branches: [master]  pull_request:env:  GOPROXY: "https://proxy.golang.org"jobs:  lint: name: Lint runs-on: ubuntu-latest steps:- uses: actions/checkout@v2- name: Run golangci-lint  uses: actions-contrib/golangci-lint@v1  test: name: Test strategy:matrix:  go-version: [1.13.x, 1.14.x]  platform: [ubuntu-latest, macos-latest, windows-latest] runs-on: ${{ matrix.platform }} steps:- name: Install Go  uses: actions/setup-go@v1  with: go-version: ${{ matrix.go-version }}- name: Checkout code  uses: actions/checkout@v2- name: Run unit tests  run: go test -v -race -coverprofile=coverage -covermode=atomic ./...- name: Upload coverage report to Codecov  uses: codecov/codecov-action@v1.0.6  with: file: ./coverage flags: unittests- name: Cache downloaded modules  uses: actions/cache@v1  with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: |${{ runner.os }}-go-

最初のon.push.branchesで自動テスト実行の対象にするブランチを指定しているようですね。「ここで指定したブランチがプッシュされたら、実行してね」というトリガー指定みたいです。

envでは環境変数を設定していそうです。ちなみに指定されているGOPROXY( “https://proxy.golang.org”)はモジュールのダウンロードを高速にするためのキャッシュプロキシだそう。(参考:Modules | Golang

続くjobsはテスト実行前のあれこれの処理でしょうか。ここでは最新のUbuntu上で構文チェックしているようですね。

そしてtest。test.strategy.matrixで動かすOS, Go言語のバージョンを指定。test.stepsで実際の実行手順を定義、という感じですね。

参考リンク・書籍

最新情報をチェックしよう!