今更GitHub Actionsに入門してみた
背景
- GitLab CIやJenkins ArgoCDを使ってきたが、業務で本格的にGitHub Actionsを使う必要が出てきたのでスクラップにする。
- 現状は簡単な自動テンプレートをpythonのテストしたくたいのレベル
公式docはこちら
5分で完マスできるらしい
初期設定
-
.github/workflow
ディレクトリを作成する - 上記ディレクトリに任意の名称のyamlファイルを配置
- yamlにjob内容を記載すればOK
Quick Start
- 以下によしななワークフローのテンプレートがあるのでお試しならここでもよさげ
しかも、GitHubが最初にサジェストしてくれる- https://github.com/actions/starter-workflows
- e.g.
- 各種buildやlintやsecurity scanなどがある
いくつかスターターを見てみる
※なんとなくで見るので違うところはありそう
- e.g. tfsec
-
name
: job全体の識別名 -
on
: jobの発火条件-
push
: push時に実行-
branches
: どのブランチにpushした時に実行するか(list指定かつRepositoryの設定に依存した形で記載できる)
-
-
pull_request
: PR出した時に実行-
branches
: どのブランチにMRを出した時に実行するか(list指定かつRepositoryの設定に依存した形で記載できる)
-
-
schedule
: 定期的に実行-
cron
: 定期実行時間(e.g.$cron-weekly
とか書くといい感じにweeklyでやってくれる)
-
-
-
jobs
: 実際のCIで実行するjob
jobs -> stepとっており、jobの並びもできるしjobの中でstepを複数にしていい感じにすることもできる -
tfsec
: この階層はjobの表示名-
name
: jobのやることの明記 -
runs-on
: 実行環境のDockerImageの指定
ubuntu-latest is https://github.blog/changelog/2022-11-09-github-actions-ubuntu-latest-workflows-will-use-ubuntu-22-04/ -
permissions
: CI内でGitHubのリソースを操作する権限を調整できる(e.g.流れでissueを立てる etc...) -
steps
: 実際に実行するscriptを記載-
name
: stepのやることの明記 -
uses
: GitHubの外部レポジトリのworkflowの利用 -
with
: 外部workflowを利用する際のパラメータ指定
-
-
もしstarterを利用するときは以下の変数はいい感じに変換してくれるらしい
These variables can be placed in the starter workflow and will be substituted as detailed below:
$default-branch: will substitute the branch from the repository, for example main and master
$protected-branches: will substitute any protected branches from the repository
$cron-daily: will substitute a valid but random time within the day
実行環境
GitHub hoster runnerとself hoster runnerを選べる
GitHubのhosted runner
- 概要
各 GitHub ホステッド ランナーは、ランナー アプリケーションとその他のツールがプレインストールされた GitHub によってホストされる新しい仮想マシン (VM) であり、Ubuntu Linux、Windows、または macOS オペレーティング システムで使用できます。GitHubホストランナーを使用すると、マシンのメンテナンスとアップグレードが自動的に行われます。
- Debian系とかRHEL系が使えなかったりするけど基本Container動かすだろうから問題なさそう
-
ワークフローは、VM で直接実行することも、Docker コンテナーで実行することもできます。
- ちゃんとベースがメンテされるのはありがたい
-
- ハードウェアリソースは以下(2vCPU/7GBがメイン)
- 金で解決できる(https://docs.github.com/ja/actions/using-github-hosted-runners/about-larger-runners/about-larger-runners#machine-sizes-for-larger-runners)
GitHub では、GitHub Team と GitHub Enterprise Cloud プランのお客様には、より多くの RAM、CPU、ディスク領域を備えたさまざまなマネージド仮想マシンが用意されています。
- hosted runnerにはプレインストールされたソフトウェアがあり、追加でサポートissueを出したり、CIの中のstepでaptなりbrewなりで追加できる
- VMはAzureのStandard_DS2_v2、macOSだけはGitHub自前の環境
- = GIPはAzureのhostされるIPアドレス範囲で適当に降ってくる
- VM内は
sudo
を使えるので管理者権限でなんでもできる
- Debian系とかRHEL系が使えなかったりするけど基本Container動かすだろうから問題なさそう
self hosted runner
- 概要
- selfhosted runnerは自前管理のホストを用意してGitHubから提供されるrunner applicationを使ってRunnerとして加入させる機能
- 感想: 強力なVMだったりセキュリティ上、ホストレベルで分離したい時に使えそう
- 最低限のselfhosted runnerを用意しておけばそれをスケールさせるオートメーションを実現できるかもしれない( https://docs.github.com/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/autoscaling-with-self-hosted-runners )
- セキュリティ上の懸念
セルフホストランナーは、プライベートリポジトリでのみ利用することをおすすめします。 これは、ワークフロー内でコードを実行する pull request を作成することで、パブリック リポジトリのフォークによって、セルフホステッド ランナー マシン上で危険なコードが実行される可能性があるからです。
GitHub hosted runnerからプライベートリソースを使う時
VMは全ユーザ共有なので、プライベートNW内のリソースにアクセスする際は其れ相応の方法が必要
- APIゲートウェイを使ってOIDCを利用する
- WireGuardをつかっていい感じにルーティングする
課金について
- パブリックレポジトリ
パブリック リポジトリの標準の GitHub ホステッド ランナーとセルフホステッド ランナーの場合は無料です。
- プライベートレポジトリ
プライベート リポジトリの場合、アカウントのプランに応じて、GitHub ホステッド ランナーでの使用を対象として、一定量の無料の使用時間 (分) とストレージが各 GitHub アカウントに付与されます。 含まれる量を超える使用は、使用制限によって制御されます。
- 使用制限機能
- ベースは0になっているので予算以上の使いすぎを防げる
- AzureのサブスクリプションIDを接続して支払いも連携できる
- 金額
- ストレージ
- 0.008 [USD/(GB * day)]
- リソース
- ストレージ
- 課金量計算サイト: https://github.com/pricing/calculator?feature=actions