二度忘れた事を三度忘れないようにする

しがないフリーランスIT系エンジニア

GolangリポジトリでGithub Actionsを使ってみた

早速、GithubでActionsを使おうとすると、言語を自動的に解析しておススメのワークフローが出てくるので、今回はGoに従ってみます。

f:id:knhko:20200518161049p:plain

Set up this workflowをクリックするとワークフロー用ファイルが読み込まれ、カスタマイズしてコミットするように促されます。

f:id:knhko:20200518161543p:plain

とりあえず、そのままコミットするとファイルがコミットされると同時に最初のActionsが実行されています。

が、まずは先ほど作成したファイルの中身を見ていきましょう。

name: Go

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

nameは特に捻りもなくワークフロー名を指定するだけのようです。
次にonを指定することで、ワークフロー実行のトリガー・条件を設定できます。
今回はmasterブランチにPUSHまたはプルリクが発生した場合にこのワークフローが実行されるようになっています。ブランチ以外にもタグやファイルパスを指定し、より細かい条件にすることも可能です。

jobs:

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:

ワークフローで実行する内容はjobs以下に記述していきます。
最初のbuildというのはjob_idと呼ばれるもので、英字から始まる任意の値を設定できます。次のnameはジョブの名前でGUIで表示されるときはここの値を使うようです。
runs-onはジョブを実行する環境を設定するもので、現時点ではWindowsServer 2019、Ubuntu(16.04, 18.04)、macOS Catalina 10.15の4種類使えるようです。(セルフホストランナーは割愛)
steps以下に具体的な環境変数やコマンドを記述していきますが、今回の例では込み入った設定はなさそうです。

    - name: Set up Go 1.x
      uses: actions/setup-go@v2
      with:
        go-version: ^1.13
      id: go

    - name: Check out code into the Go module directory
      uses: actions/checkout@v2

    - name: Get dependencies
      run: |
        go get -v -t -d ./...
        if [ -f Gopkg.toml ]; then
            curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
            dep ensure
        fi

    - name: Build
      run: go build -v .

    - name: Test
      run: go test -v .

YAML形式なので、ハイフン毎に処理が固まっていることは容易に判断できるようになっています。

最初のステップはnameに記載通りGoのセットアップを行っています。usesでは公開されているコードを利用するかを指定します。詳細は公式ドキュメントに記載されていますが、今回はテンプレ通り特に変更しません。
withで実行するコンテナへ環境変数を渡すことができます。今回はGolangのバージョンを指定しています。
idはステップに一意の識別子をつけることが出来るものです。これを設定しておくことで、コンテキストから参照することが出来るようです。

2番目のステップは公式ドキュメントによると、いくつかのパターン時にcheckoutアクションを実行する必要があり、今回はリポジトリをビルドしてテストするとき、または継続的インテグレーションを使用するとき、ワークフローにリポジトリのコードのコピーが必要な場合。に当てはまるので呼び出します。

3番目のステップではrunを使って具体的な処理を行っています。サンプルのワークフローファイルなので、この通り動かないですが、内容的にはgo get後に指定のファイルがあればインストールスクリプトを実行する、という内容なので、自分のプログラムはModules機能を使っておりgo get不要なので削除します。

4番目、5番目は単純にビルド及びテストコマンドを実行しているだけですね。

動作確認ということで、このままcommit, pushするとActionsが稼働するので、結果を見ていきます。

f:id:knhko:20200518184755p:plain

何回か失敗しているのはTypoとかなので気にせず、、、最上段をクリックすることで詳細が確認できます。

f:id:knhko:20200518184938p:plain

今回は特に成果物(Artifact)の設定を記述していないので、上記のような感じになります。

f:id:knhko:20200518185251p:plain

画面左側に設定したビルドが載ってくるので、クリックするとそのビルドのステップ毎にログが出力されるので、こちらでデバッグしていくことが出来ます。

ここまでで、Linux環境においてBuildとTestの実行を自動化することが出来ました。次回はビルド済みの物を配布出来るよう、Githubのリリースへ自動登録していきます。