GitHub Actionsに入門した
はじめに
この記事は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が一連のコマンドを実行する流れは大まかに以下のようになります。
- イベントによりワークフローが実行される。
- ワークフローはジョブを並列に実行する。
- ランナーでジョブに含まれるステップが順番に実行される。
- ランナーが結果をGitHubに返し、確認できる
詳しくはUnderstanding GitHub Actionsを参照してください。
始め方
GitHub Actionsは以下の手順で始められます。
前提としてGitHub Actionsを始める前にはGitHubリポジトリが必要になります。
-
.github/workflows
ディレクトリを作成する - そのディレクトリ内に任意のワークフローファイルを作成する
実際にやってみたい場合は公式チュートリアルQuickstart for GitHub Actionsが手軽でおすすめです。
ワークフローファイルの作成
ワークフローを作成するために.github/workflows
ディレクトリに任意のワークフローファイルを作成します。ワークフローファイルは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
を読み出しています。
より詳しい情報は以下の公式ドキュメントに書かれています。
- Essential features of GitHub Actions ... 環境変数の使い方、Bashスクリプトの実行方法などについて
- Managing complex workflows ... 秘密情報の扱い方、直列で実行する方法などについて
- Events that trigger workflows ... 様々なイベントについて
- Expressions ... 動的な値の設定について
- Workflow syntax for GitHub Actions ... 詳細な文法、設定項目について
- Environment variables ... 環境変数について
Discussion