GitHub ActionでCI環境やってみる
はじめに
今更ながらGitHub ActionでのCI環境作ってみる。
そもそも一から作ったことがないので、
改めて公式みながらやってみましょう。
初めに行っておくと今回は基本的な動作のみで、CI構築まで至らず。
CI構築は次の機会に。
公式が結構充実していて、クイックスタートやガイドを読み進めると基本的なパターンはわかりそうです。
ここで書いた内容もほぼ公式の抜粋となっております。
準備
リポジトリを用意する。(新規でも既存のでもOK)
ブランチ作っておきます。作業は作ったブランチで行います。
github-action-demoとでもしておきます。
※後の手順でプルリクを作り、そこでGitHub Actionが動作するのを見たいので以降はブランチで作業します。
ワークフローの作成
クイックスタートをベースにしています。
クイックスタートではGitHub上で直接ファイルやディレクトリを作成していますが、
ここではローカルでブランチを切ってファイルを作成していくイメージとしています。
VSCodeでの入力補完など効かせたかったので上記としています。
GitHub Actions のクイックスタート - GitHub Docs
- リポジトリ直下にgithub/workflows ディレクトリを作成します。
- github-actions-demo.ymlというファイル名のYAMLファイルを作成します。
- YAMLの中身はまるっとコピペ
- YAMLファイルを保存して、コミット&プッシュします。
- プルリク作成します。
- Actionが動作します。
YAMLファイル
name: GitHub Actions Demo 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@v2 - 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 }}."
クイックスタートのアクションはほぼechoでテキストを出力しているだけですが、
githubコンテキスト情報を使っていたり、
usesでソースをチェックアウトしてたり参考になります。
GitHub Actionsのワークフロー構文
name
ワークフローの名前。 GitHubでは、リポジトリのアクションページにワークフローの名前が表示されます。
nameを省略すると、GitHubはリポジトリのルートに対するワークフローファイルの相対パスをその値に設定します。
on
必須。
ワークフローをトリガーするGitHubイベントの名前。
指定できるのは、1つのイベントstring、複数イベントのarray、イベントtypesのarrayです。
あるいは、ワークフローをスケジュールする、またはワークフロー実行を特定のファイルやタグ、ブランチ変更に限定するイベント設定mapも指定できます。
使用可能なイベントの一覧は、「ワークフローをトリガーするイベント」を参照
permissions
# 権限の指定(未指定の場合はnone) permissions: actions: read|write|none checks: read|write|none contents: read|write|none deployments: read|write|none issues: read|write|none packages: read|write|none pull-requests: read|write|none repository-projects: read|write|none security-events: read|write|none statuses: read|write|none
# 読み込み権限 permissions: read-all # 書き込み権限 permissions: write-all
env
環境変数のmap。
ワークフロー中のすべてのジョブのステップから利用できる。
env: SERVER: production
default
デフォルト設定のmap。
ワークフロー中のすべてのジョブに適用されます。
defaults: run: shell: bash working-directory: scripts
concurrency:
まだベータ版のようですが、並行処理の設定が可能
デフォルトでは、ジョブは並行して実行されます。
jobs
ワークフローの実行処理
1つ以上のジョブが必要
デフォルトでは並行して実行されるが、順序を制御したい場合はneedsキーワードを使用する。
jobs: my_first_job: name: My first job my_second_job: name: My second job
needs
jobs: job1: # job1の終了後に実行 job2: needs: job1 # job1とjobb2の終了後に実行 job3: needs: [job1, job2]
※途中のジョブが失敗した場合、そのジョブを必要としている他のジョブはすべてスキップされます。
runs-on
ジョブが実行されるマシンの種類
GitHubホストランナーあるいはセルフホストランナー
runs-on: ubuntu-latest
environment
GitHub上で設定できるenvironmentの指定
environmentの名前を指定することでenvironment内の環境変数をすべて設定可能
jobs: stale: runs-on: ubuntu-latest permissions: issues: write pull-requests: write environment: staging_environment steps: - uses: actions/stale@v3
steps
ジョブの中の1実行単位
name
GitHubで表示されるステップの名前。
uses
実行されるアクションを選択します。
run
OSのシェルを使用してコマンドラインプログラムを実行します。
matrix
単一のジョブ設定を元に複数のジョブを実行する。
複数バージョンの言語や複数のOSなど
runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-18.04, ubuntu-20.04] node: [10, 12, 14] steps: - uses: actions/setup-node@v2 with: node-version: ${{ matrix.node }}
container
ジョブ実行時のコンテナ設定
各ワークフロー構文の詳細
詳細は下記参照ですが、割と使いそうなものだけピックアップ
GitHub Actionsのワークフロー構文 - GitHub Docs
onの詳細
単一のイベントの例
# リポジトリ内の任意のブランチにコードがプッシュされたときにトリガーされる on: push
複数イベントの例
# プッシュもしくはPull Requestイベントでワークフローをトリガーする on: [push, pull_request]
複数イベントで異なるアクティビティを指定する例
on: # プッシュもしくはPull Requestでワークフローをトリガーする # ただしメインブランチの場合のみ push: branches: - main pull_request: branches: - main # page_buildとリリース作成イベントでもトリガーする page_build: release: types: # この設定は上記のpage_buildイベントには影響しない - created
詳細
ワークフローをトリガーするイベント - GitHub Docs
ホストランナー
GitHubホストランナー
オペレーティングシステム、プリインストールされたパッケージとツール、セルフホストランナーアプリケーションの自動アップデートを受信します。
GitHubによって管理及びメンテナンスされます。
ジョブの実行のたびにクリーンなインスタンスを提供します。
GitHubプランの無料の分を使います。無料の分を超えると、分単位のレートが適用されます。
セルフホストランナー
セルフホストランナーアプリケーションのみ、自動アップデートを受信します。
オペレーティングシステムとその他のソフトウェアのアップデートはあなたがしなければなりません。
すでに支払いをしているクラウドサービスあるいはローカルマシンを利用できます。
利用するハードウェア、オペレーティングシステム、ソフトウェア、セキュリティ上の要求に合わせてカスタマイズできます。
ジョブの実行のたびにクリーンなインスタンスを保持する必要がありません。
GitHub Actionsと合わせて無料で利用できますが、ランナーマシンのメンテナンスコストはあなたが受け持ちます。
さいごに
ベース部分はなんとなく理解したので、
引き続きCIの導入と個人的にやりたいプルリクの自動作成を導入します。