■ はじめに
https://dk521123.hatenablog.com/entry/2021/11/04/142835
https://dk521123.hatenablog.com/entry/2022/06/16/151443
の続き。 徐々にではあるが、Github Actions の文法をまとめておく
目次
【0】構造 【1】on 【2】jobs 【3】runs-on 【4】steps 1)run 2)uses 【5】strategy 1)matrix 【6】env
【0】構造
ワークフロー(YAMLファイル) └ on: └ イベント(e.g. push, pull_request) └ jobs: └ ジョブ(名前は任意) └ steps: └ アクション
公式ドキュメント
* 分からない文法があった場合は、 まずは、以下の公式ドキュメントを参照
https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions
【1】on
* 起動するためのイベントを指定 * 詳細は、以下の関連記事を参照。
Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128
1)主なGithubイベント
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows
イベント | 説明 | memo |
---|---|---|
push | リモートリポジトリへpush時 | 特定のbranch/path/tagなどを指定することも可能 |
pull_request | プルリクエスト作成時 | |
deployment | デプロイ時 | |
release | リリース時 | |
workflow_run | ワークフローの実行時 | 前ワークフローの完了後に次のワークフローが開始 |
workflow_call | ワークフロー呼び出し時 | |
workflow_dispatch | ワークフロー手動実行 |
2)サンプル
on: # Triggers the workflow on push or pull request events but only for the develop branch push: branches: [ develop ] pull_request: branches: [ develop ]
【2】jobs
* 処理の最上位単位
サンプル
jobs: job1: # [1] Job ID を指定 name: Hello World # [2] Job Name を指定 runs-on: ubuntu-latest # [3] Runner を指定 steps: # [4] 実行する処理一覧(Steps)を指定 - run: echo "Hello world!!" # 実際の実行処理 job2: #
1)needs
* Job 同士の依存関係が指定できる => 逆に言うと定義しないと全て並列処理で実行される => 詳細は、以下の関連記事を参照。
Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128
1)サンプル
jobs: job1: job2: needs: job1 job3: job4: # 複数指定 needs: [job2, job3]
【3】runs-on
* ジョブを実行するOS(ランナー)を指定
* ラベル が付いているセルフホステッド ランナーで実行
例:ラベル「linux、x64、gpu」が付いているセルフホステッド ランナー
runs-on: [self-hosted, linux, x64, gpu]
1)runs-onを動的に指定する
* 以下の関連記事を参照。
Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736
【4】steps
* GitHub Actions Workflow の最小単位 => Step < Job < Workflow * 以下の2種類ある 1)run 2)uses
1)run
* CLIプログラムの実行
サンプル
- jobs job1: name: First Job runs-on: ubuntu-latest steps: - name: First step run: echo "${KEY1}, world!" env: - KEY1: Hello shell: bash # ★補足参照★ working-directory: tmp
補足:shell の種類
https://docs.github.com/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsshell
shell parameter | Support OS | Explanation |
---|---|---|
bash | ALL | シェル。Windows用Gitに含まれるbashシェルが使用 |
pwsh | ALL | PowerShell Core |
python | ALL | Pythonのコマンドを実行 |
cmd | Windows | コマンドプロンプト |
powershell | Windows | PowerShell Desktop |
2)uses
* 再利用可能なアクションの実行 * マーケットプレース(例えば「actions/checkout@vX」)や Workflowと同じリポジトリに定義されたものを利用
補足1:Githubマーケットプレース
* 以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2023/12/21/155224
補足2:actions/checkout@vX について
* 以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/2022/06/16/151443
【5】strategy
1)matrix
* job を複数の変数の組み合わせで実行するための機能
https://docs.github.com/ja/actions/using-jobs/using-a-matrix-for-your-jobs
サンプル
jobs: example_matrix: strategy: matrix: os: [ubuntu-22.04, ubuntu-20.04] version: [10, 12, 14] runs-on: ${{ matrix.os }} steps: - uses: actions/setup-node@v3 with: node-version: ${{ matrix.version }}
【6】env
* 環境変数の設定
サンプル
# This is a basic workflow to help you get started with Actions name: CI on: push: branches: [ "develop" ] pull_request: branches: [ "develop" ] env: DEMO_S3_PATH: s3://your-s3-bucket/xxxx jobs: build: runs-on: ubuntu-latest steps: - name: Run a one-line script run: echo Hello, world! - ${{ env.DEMO_S3_PATH }}
参考文献
https://qiita.com/kitta65/items/9c19b323e8c4e837827c
https://rso.hateblo.jp/entry/2019/12/14/102305
https://qiita.com/nicco_mirai/items/5a306549e57ee69403c9
関連記事
Github ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/07/18/234652
Github の 各種設定 ~ Actions ~
https://dk521123.hatenablog.com/entry/2024/07/13/163010
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/12/21/155224
Github Actions ~ 差分ファイルを抽出する ~
https://dk521123.hatenablog.com/entry/2024/08/11/123351
Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128
Github Actions ~ if ~
https://dk521123.hatenablog.com/entry/2024/03/11/000000
Github Actions ~ 三項演算子 ~
https://dk521123.hatenablog.com/entry/2024/06/20/234016
Github Actions ~ workflow_dispatch / 手動実行 ~
https://dk521123.hatenablog.com/entry/2024/03/12/012953
Github Actions ~ workflow_run / workflow_call ~
https://dk521123.hatenablog.com/entry/2024/02/14/232546
Github Actions ~ pull_request / pull_request_target ~
https://dk521123.hatenablog.com/entry/2024/04/10/152101
Github Actions ~ エラー処理 / continue-on-error ~
https://dk521123.hatenablog.com/entry/2024/01/01/232057
Github Actions ~ GITHUB_ENV ~
https://dk521123.hatenablog.com/entry/2023/12/29/000840
Github Actions ~ GITHUB_OUTPUT ~
https://dk521123.hatenablog.com/entry/2024/01/30/002943
Github Actions ~ プロパティ ~
https://dk521123.hatenablog.com/entry/2023/12/23/231250
Github Actions ~ Annotations / Matcher ~
https://dk521123.hatenablog.com/entry/2024/03/25/182153
Github Actions ~ Artifact ~
https://dk521123.hatenablog.com/entry/2024/02/13/021717
Github Actions ~ timeout-minutes ~
https://dk521123.hatenablog.com/entry/2024/02/09/000129
Github Actions ~ Github Actions環境変数 ~
https://dk521123.hatenablog.com/entry/2024/02/26/194437
Github Actions ~ サンプル集 ~
https://dk521123.hatenablog.com/entry/2023/12/31/231438
Github Actions ~ Pythonを使うには ~
https://dk521123.hatenablog.com/entry/2024/02/04/011205
Github Actions ~ Python関連 ~
https://dk521123.hatenablog.com/entry/2022/06/21/143624
Github Actions ~ SQL Linter ~
https://dk521123.hatenablog.com/entry/2024/03/04/180308
Github Actions ~ Scala Linter ~
https://dk521123.hatenablog.com/entry/2024/04/02/002828
Github Actions ~ JSON Linter ~
https://dk521123.hatenablog.com/entry/2024/08/08/202314
Github Actions ~ YAML Linter ~
https://dk521123.hatenablog.com/entry/2024/08/09/141801
Github Actions ~ TOML Linter ~
https://dk521123.hatenablog.com/entry/2024/08/10/115429
Github Actions ~ Slack連携 ~
https://dk521123.hatenablog.com/entry/2024/04/03/003053
Github Actions ~ Self-hosted runners / 入門編 ~
https://dk521123.hatenablog.com/entry/2023/12/18/204119
Github Actions ~ Self-hosted runners / あれこれ編 ~
https://dk521123.hatenablog.com/entry/2024/02/07/002736
Github Actions ~ runs-onを動的変更することを考える ~
https://dk521123.hatenablog.com/entry/2024/05/18/032229
Github Actions ~ 設定値を切り替えることを考える ~
https://dk521123.hatenablog.com/entry/2024/02/18/232926
Github Actions ~ 設定ファイルを考える ~
https://dk521123.hatenablog.com/entry/2024/05/21/201239
Github Actions ~ セキュリティ/Third-Party Github Action ~
https://dk521123.hatenablog.com/entry/2024/04/05/000136
Github Actions ~ セキュリティ/インジェクション攻撃 ~
https://dk521123.hatenablog.com/entry/2024/04/16/222419
Github Custom Action ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/27/220219
Github Custom Action ~ Docker コンテナー ~
https://dk521123.hatenablog.com/entry/2024/06/28/030619
Github Custom Action ~ 複合アクション ~
https://dk521123.hatenablog.com/entry/2024/06/29/021837
Github ~ Webhook 編 ~
https://dk521123.hatenablog.com/entry/2020/01/25/224402
GitHub CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/02/17/233836
reviewdog ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/04/13/232832
reviewdog ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/04/18/161200
datadog for Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/08/26/200950
Amazon SNS ~ AWS CLI ~
https://dk521123.hatenablog.com/entry/2024/02/21/141346
Self-hosted runner下の Github actions が突然エラー
https://dk521123.hatenablog.com/entry/2024/07/05/000212