Github Actions入門その3-アクションを探す・使う・自作する

2023-04-30Git,GitHub,Github Actions

はじめに

前々回、前回と Github Actions に登場する用語の整理した後、実際の YAML 設定ファイルの各項目と用語の対応を見てきました。

アクション ( Action ) は1つ以上のステップで構成されたブロックです。

ワークフローは、1つ以上のジョブを持ち、ジョブは1つ以上のステップを持ちます。
( 詳細は以下を参照 )

ステップは独自のシェルコマンドを記述しても良いのですが、アクションを指定できます。
アクションは Github で公開されているものを指定したり、自作したものを利用することもできます。

今回はアクションの探し方、使い方、自作方法について紹介します。

概要

ワークフローの中で利用するアクションは以下のいずれかの方法で提供されます。

  • ワークフローが実行される Github リポジトリ内(当然、 git commit && git push されています)
  • Github の公開リポジトリ
  • Docker Hub 上の公開 Docker イメージ

公開されているアクションの探し方

Github コミュニティで作成されたアクションを探す場合は、 Github Marketplace というサイトを利用するのが良いでしょう。
キーワード検索もできますし、カテゴリ分類されているので役割の観点から探すこともできます。

Github Marketplace で見つけたアクションを追加

実際に Github Marketplace から検索したアクションを使ってみましょう。

Go 言語の実行環境を構築して、シンプルなコードを実行させてみたいと思います。

Github Marketplace の検索エリアで go setup と入力して検索してみます。

いくつかアクションが見つかりますが、一番上の Setup Go environment を利用します。
このアクションを使うと、Go げん後の実行環境を構築することができます。
指定されたバージョンの Go 実行バイナリをダウンロードした後、 PATH 環境変数の設定されているディレクトリに配置してくれます。

ページ右上の "Use laatest version" の右端はドロップダウンになっており、バージョンを指定することができます。

ボタンをクリックするとワークフローの YAML 設定ファイルに記述するステップコードのサンプルが出力されるため、これをコピーして YAML ファイルに貼り付ければ OK です。
以下のようなコードが出力されました。

- name: Setup Go environment
  uses: actions/setup-go@v4.0.0

前々回、前回と作成した Github リポジトリ に新しいワークフローを追加してみます。

$ touch .github/workflows/go-run.yaml

# 好きなエディタで開く
$ vi .github/workflows/go-run.yaml

.github/workflows/go-run.yaml を以下のように編集します。

---
name: go-run
on:
  - push
jobs:
  go-run:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - name: Setup Go environment
        uses: actions/setup-go@v4.0.0
        with:
          go-version: "1.20.3"
      - run: go run main.go

一番最後のステップで実行している main.go というコードも作成しておきます。

$ vi main.go

main.go を以下のように編集します。

package main

import "fmt"

func main() {
    fmt.Println("Hello Github Actions !")
}

ファイルをコミット&プッシュしたのち、 gh run list コマンドで実行中のワークフローを確認してみます。
もちろんコマンドを実行せず、Github Actions ページから確認しても構いません。

$ gh run list
STATUS  TITLE                               WORKFLOW              BRANCH  EVENT  ID          ELAPSED  AGE
*       go-run                              go-run                main    push   4806654432  4s       0m

しばらくすると実行が完了します。
gh run view --logs コマンドでログを確認してみます。

# ログは長いので一部抜粋しています。
$ gh run view --log 4806654432
...
go-run  Run go run main.go      2023-04-26T08:38:42.2561555Z ##[group]Run go run main.go
go-run  Run go run main.go      2023-04-26T08:38:42.2561850Z go run main.go
go-run  Run go run main.go      2023-04-26T08:38:42.2620855Z shell: /usr/bin/bash -e {0}
go-run  Run go run main.go      2023-04-26T08:38:42.2621110Z ##[endgroup]
go-run  Run go run main.go      2023-04-26T08:38:48.6089015Z Hello Github Actions !
...
go-run  Complete job    2023-04-26T08:38:49.0389677Z Cleaning up orphan processes

go run main.go が実行され、メッセージが出力されていることがわかります。
実行が成功しました。

自作アクションをワークフローと同じリポジトリに含める

アクションを自作し、ワークフローと同じ Github リポジトリに含めることもできます。
自作したアクションを利用する最もかんたんな方法となります。

このアクションを自分自身のワークフローから参照する場合、 uses 句に ./path/to/dir のようなパスの形式で YAML ファイル配置ディレクトリを指定します。
対象のディレクトリから、 action.yaml あるいは action.yml というファイルが自動的に検索され、これが読み込まれます。

実際に試してみましょう。
( ただし、今回のエントリではアクションの自作方法については深くは踏み込みません )
.github/workflows/actions ディレクトリにsay-hello というアクションを配置し、ワークフローから参照してみます。

# ディレクトリを作成
$ mkdir -p .github/actions/say-hello/

# action.yaml というファイル名でアクションの設定ファイルを作成
$ touch .github/actions/say-hello/action.yaml

# 好きなエディタで編集
$ vi .github/actions/say-hello/action.yaml

.github/actions/say-hello/action.yaml を以下の内容となるように編集します。

using には docker、 image には docker://bash を指定していますが、これは「"bash" という Docker Hub で公開されているイメージを使い、Docker コンテナを立ち上げる」という意味になります。
args で引数を指定しており、"docker run bash -c echo Hello ..." と同様の処理が実行されることになります。

---
name: "Say hello"
description: "Say hello"
author: "genzouw"
inputs:
  name:
    description: "your name"
runs:
  using: "docker"
  image: "docker://bash"
  args:
    - -c
    - "echo Hello ${{ inputs.name }}"

次に、作成したアクションをワークフローの中から参照します。
ワークフロー設定ファイルは hello.yaml としました。

$ touch .github/workflows/hello.yaml

# 好きなエディタで編集
$ vi .github/workflows/hello.yaml

.github/workflows/hello.yaml はシンプルな内容です。

コードを Github リポジトリからチェックアウトし、先ほど作成した say-hello アクションを呼び出します。
この際に、 name 属性に taro という値が設定されるようにしました。
設定した値はアクションに引き渡されます。

---
name: hello
run-name: hello
on:
  - push
jobs:
  hello:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - uses: "./.github/actions/say-hello"
        with:
          name: taro

追加したファイル群を Github リポジトリにプッシュすると、正常に実行されました。

ひとこと

Github Actions は、自動化ワークフローを作成するときにとても便利です。
この記事では、Github コミュニティが提供しているアクションの探し方、使用方法について紹介しました。
また自分で作成したアクションを使用する方法についても説明しました。
Github Actions を使って効率的に開発を進めてみましょう。

2023-04-30Git,GitHub,Github Actions