💬

GitHub Actionsに入門した

2021/10/09に公開

はじめに

この記事はGitHub Actionsを触ってみて理解したことを備忘録代わりにまとめたものです。
主にGitHub Actionsとは何か、始めるための最低限のセットアップ方法、自分がGitHub Actionsの基礎として理解しておきたいことを書きます。
そのため、GitHub Actionsに興味があるが触ったことがない人、触り始めた人向けになります。

この記事が他の人の参考になれば幸いです。
また、この記事の内容に間違った記載がありましたら、指摘してもらえるとありがたいです。

GitHub Actionsとは何か?

GitHub ActionsはGitHubが提供するCI/CDサービスです。
GitHubのリポジトリに対して何らかのイベント(プッシュなど)が起こった時に一連のコマンドを実行できます。

GitHub Actionsの基本概念

GitHub Actionsで使われる概念や言葉を説明しておきます。
ワークフロー(Workflows)は1つ以上のジョブを含み、イベントによって実行される自動化された手続きです。
イベント(Events)はワークフローを実行するトリガーとなる特定の活動です。外部のイベントもトリガーにできます。
ジョブ(Jobs)は同じランナーで実行される一連のステップです。1つのワークフローに複数のジョブがある場合は、デフォルトではジョブはそれぞれ並列で実行されます。
ステップ(Steps)はジョブに含まれる個別のアクション、もしくは、シェルコマンドです。ジョブのそれぞれのステップは同じランナーで実行されるのでステップ間で同じデータが使用できます。
アクション(Actions)は他のワークフローでも使用できる独立したコマンドです。
ランナー(Runners)はジョブを実行するサーバです。GitHubがホストする、もしくは、自分でホストするランナーが使用できます。ランナーは新しい仮想環境でジョブを実行し、ログや結果を記録してGitHubに返します。これはワークフロー内に複数のジョブがある場合でも同様でそれぞれのジョブで新しい仮想環境が作成され、実行されます。

GitHub Actionsが一連のコマンドを実行する流れは大まかに以下のようになります。

  1. イベントによりワークフローが実行される。
  2. ワークフローはジョブを並列に実行する。
  3. ランナーでジョブに含まれるステップが順番に実行される。
  4. ランナーが結果をGitHubに返し、確認できる

詳しくはUnderstanding GitHub Actionsを参照してください。

始め方

GitHub Actionsは以下の手順で始められます。
前提としてGitHub Actionsを始める前にはGitHubリポジトリが必要になります。

  1. .github/workflowsディレクトリを作成する
  2. そのディレクトリ内に任意のワークフローファイルを作成する

実際にやってみたい場合は公式チュートリアルQuickstart for GitHub Actionsが手軽でおすすめです。

ワークフローファイルの作成

ワークフローを作成するために.github/workflowsディレクトリに任意のワークフローファイルを作成します。ワークフローファイルはYAMLで記述します。

github-actions-example.yaml
# ワークフロー名の設定
name: github-actions-example

# トリガーの設定
# この場合は backend ディレクトリ配下に変更が加えたコミットが main ブランチにプッシュされた場合にワークフローを実行する。
on:
  push:
    branches:  # パターンとブランチ名が一致した場合に実行する
      - main
    paths:     # パターンとパスが一致した場合に実行する
      - backend/**

# ジョブの設定
jobs:
  example-job:                                 # 一意のジョブ ID
    runs-on: ubuntu-20.04                      # ランナーの設定
    env:                                       # ステップ間で共有する環境変数の設定
      GREETING: Hello
    steps:
      - name: Checkout code                    # ステップ名の設定
        uses: actions/checkout@v2              # アクションを実行する
      - name: Set up Go
        uses: actions/setup-go@v2
        with:
          go-version: 1.17.1
      - name: Show Go version
        run: go version                        # コマンドを実行する
        working-directory: ./backend           # ワーキングディレクトリの設定
      - name: Greeting
        run: echo "$GREETING $FIRST_NAME $LAST_NAME"
        env:                                   # 環境変数の設定
          FIRST_NAME: Satoshi
          LAST_NAME: ${{ secrets.LAST_NAME }}  # 秘密情報の読み出し
  other-job:
    ...

大まかな書き方は上の例のようになります。
${{ secrets.LAST_NAME }}は事前にGitHubリポジトリのSettings > Secretsページで設定した秘密情報LAST_NAMEを読み出しています。

より詳しい情報は以下の公式ドキュメントに書かれています。

参考

GitHubで編集を提案

Discussion