GitHub Actionsの処理の流れと基本的な使い方を理解するための項目をまとめました。
概要
- GitHub ActionsとはGitHub上でpushやmerge、PR作成をトリガにして処理を走らせる機能です
- テスト、ビルド、デプロイなどができます
- .github/workflows/*.ymlで記載されたファイルを実行します
- 料金はpublicリポジトリであれば無料になります
動作環境
- Apple M1
- macOS 13.4
処理の構成
GitHub Actionsは下記の項目から構成されます。
用語 | 意味 |
---|---|
workflow | 一連の処理 |
job | workflow内の個々の実行タスク。1つ以上存在して専用のコンテナ内で順次・並列実行される。 |
step | job内での作業単位 |
script/action | step内での作業単位 |
GitHub Actionsの設定と実行
まずは試して流れを把握します。
- 任意のリポジトリを用意します。
- ローカルで
.github/workflows/github-actions-demo.yml
を作成します- 補足:
.github/workflows/*.yml
が検出されて処理が走ります
- 補足:
- 下記の内容を記載します
-
github-actions-demo.yml
name: GitHub Actions Demo run-name: ${{ github.actor }} is testing out GitHub Actions 🚀 on: [push] jobs: Explore-GitHub-Actions: runs-on: ubuntu-latest steps: - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event." - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!" - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}." - name: Check out repository code uses: actions/checkout@v4 - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." - run: echo "🖥️ The workflow is now ready to test your code on the runner." - name: List files in the repository run: | ls ${{ github.workspace }} - run: echo "🍏 This job's status is ${{ job.status }}."
-
- commitしてpushすると処理が走ります
- 結果はリポジトリの actions > All workflows > GitHub Actions Demo から確認できます
- Explore-GitHub-Actionsで詳細な結果を確認できます
yml構文の理解
GitHub Actionsの実行結果とymlを比較しながらymlの構文を理解します。
構文 | 意味 |
---|---|
name | workflowの名前。コンソール上ではアクションタブに表示される |
run-name | workflowから生成されたworkflow実行の名前。コンソール上では実行リストに表示される |
on | workflowを実行するトリガ。主なものにpush, pull_request, schedule, issuesなどがある。その他の選択肢はこちら |
jobs | 以降に1つ以上のjobを記載する |
jobs.<job_id> | jobへの一意な識別子。ここではExplore-GitHub-Actionsとした |
jobs.<job_id>.runs-on | jobを実行するマシンの種類。選択例はこちら |
jobs.<job_id>.steps | 以降にscript/actionを記載する |
jobs.<job_id>.steps[*].run | OSのシェルを実行。コンソール上ではコマンドが表示されるが、後述するnameで上書き可能 |
jobs.<job_id>.steps[*].name | GitHubコンソールで実行結果のフローに表示させるstep名。 |
jobs.<job_id>.steps[*].uses | 同リポジトリ、公開リポジトリ、またはコンテナで定義されているコマンド。詳細はこちら |
env | 環境変数 |
よく使われる構文
onのフィルターと複数イベント
on:
# 実行タイミングをdevelopブランチ、release/ブランチ配下にPR作成された時に限定する(フィルター)
pull_request:
branches:
- develop
- 'release/**'
# 除外ブランチ
branches-ignore:
- 'mona/octocat'
- 'releases/**-alpha'
# push時のイベントとして加える(複数化)
push:
branches:
- staging:
- 'release/**'
workflowと同じリポジトリ内にあるアクションの使用
前提として下記のフォルダ構成の場合
|-- hello-world (repository)
| |__ .github
| └── workflows
| └── my-first-workflow.yml
| └── actions
| |__ hello-world-action
| └── action.yml # 実行したいファイル
jobs:
my_first_job:
runs-on: ubuntu-latest
steps:
# リポジトリのcheckout
- name: My first step - check out repository
uses: actions/checkout@v4
# アクションの呼び出し
- name: Use local hello-world-action
uses: ./.github/actions/hello-world-action
node環境の構築
ゼロから環境構築するのは大変なので既存のパッケージ化されたactionを使用します。参考
jobs:
my_first_job:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
# node-version: 18
node-version-file: '.nvmrc'
check-latest: false
architecture: 'x64'
- run: npm ci
- run: npm test
参考
下記を参考にさせていただきした!