GitHub Actionsで遊ぶ
前提となる基礎用語
CI/CD
Continuous Integretion(継続的インテグレーション)
CIをコードの変更を起点にコードの静的解析、ビルド、テストなどを自動実行。
Continuous Deployment(継続的デプロイメント)
コードやビルドされた成果物をプロダクトへ自動反映させること
GitHub Actions
その他参考
GitHub Actionsに関わる諸概念
ワークフロー
自動化用の一連の処理、またその定義
イベント
ワークフロー実行のトリガーとなるアクティビティのこと。
リポジトリで発生する操作イベント(Webhook)をトリガーにする。(手動実行も可能)
on
シンタックスを用いてYAMLに定義していく。
より詳細は下記。
TODO:ペイロード、アクティビティタイプ
ワークフローの主要構成コンポーネント
- イベント(JOBのトリガー)定義
- JOB定義
- JOB名
- ランナー
- 各ステップの定義
- JOB定義2
- JOB名
- ランナー
- 各ステップの定義
ジョブ(Job)
1つ以上のステップから構成されるタスクの定義。
jobs
シンタックス下に定義する。
ジョブはランナーとよばれるアプリケーション内で実行される。
ジョブが分割されるとそれぞれ別のランナーアプリケーションインスタンスで実行されるのでジョブ間のデータ共有の工夫が必要。
ステップ(Step)
ステップはジョブの中で実行されるタスク。
jobs.job_id.steps.
シンタックス下に個々のステップを定義。
(1)利用するアクション:usesシンタックス
(2)シングルラインコマンド:runシンタックス
(3)マルチラインコマンド:runシンタックス
のいずれかで定義。
アクション
ステップを構成する最小要素。
jobs.job_id.steps[*].uses
シンタックスで各ステップで実行するアクションを指定。
アクションは公式アクションやマーケットプレイスで公開もされているのでチェックしてみよう。
アクションは以下の3つで作ることが出来る。
JavaScriptアクション
JSで記述。(TSでも良いはず)
ランナーで直接実行。起動時間は早い。ランナーOSはLinux, Mac, Windowsなど。
Dockerコンテナアクション
アクションの内容をコンテナとしてパッケージ化。
ランナー上でコンテナを立ち上げて実行。言語制約はない。起動時間は(イメージをPullしてからコンテナを立ち上げるので)時間がかかる。
利用可能なランナーOSはLinuxのみ。
Copositeアクション
複数ステップの処理をバンドルし、1つのアクションとして定義実行。
ランナーOSはLinux, Mac, Windowsなど。
ランナー
ジョブはランナーと呼ばれるアプリケーションにより実行される。
runs-on
シンタックスで指定。
ユーザーは実行環境のホスティングモデルを以下の2種類のランナーから選択する。
GitHubホスト型ランナー
GitHubが提供しているジョブ実行環境として、ランナーが既にインストールされた仮想マシン。
セルフホスト型ランナー
独自環境で実行。
とりあえず始める
任意の自分のリポジトリで「Actions」を選択
setup a workflow yourself
テンプレートを選択 or CIパイプラインを構築してみる
適当なリポジトリを作る
-- greeting.py
def greetings():
return 'Greeting'
if __name__ == "__main__":
greetings()
-- greeting_test.py
import unittest
from greeting import greetings
class TestGreeting(unittest.TestCase):
def test_greeting(self):
self.assertEqual("Greeting", greetings())
if __name__ == "__main__":
unittest.main()
ワークフロー作成
ローカルリポジトリの.github/workflows
下にpython.yml
ファイルを作成。
下記はmainブランチへのpushをトリガーに実行され、リポジトリをチェックアウトし、Python環境のセットアップ及びアプリケーションのテストを行う。
name: Kuma Action Test
on:
# mainへのpush
push:
branches:
- main
# 手動実行
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-18.04
steps:
# リポジトリをチェックアウト
- uses: actions/checkout@v2
# Python環境のセットアップ(architectureはデフォでx64)
- name: Set up Python
uses: actions/setup-python@v3
with:
python-version: '3.7.10'
- name: Get Python version
run: python -V
- name: Test
run: python greeting_test.py
ワークフロー実行
補足メモ イベント「pull_request」の注意点 TODO
イベントによって複数のアクティビティが存在する。特定のアクティビティのときのみをトリガーにすることも可能。
ペイロードとという情報?github.eventコンテキストを使えばworkflow内で使えるらしい。
アクティビティタイプのopenedとsynchronize、reopened以外はワークフローデフォでは実行されないっぽい。
他のアクティビティタイプを使いたいならtypes
で明示必要。
補足メモ GitHubで新しいLabelを追加
GitHubのPersonal Access Token
必要な権限:read:org, repo, user:email, workflow, write:packages, write:repo_hook
その他
- with
アクションによって定義される入力パラメーターの map