Open9

今更GitHub Actionsに入門してみた

Iku YamamotoIku Yamamoto

背景

  • GitLab CIやJenkins ArgoCDを使ってきたが、業務で本格的にGitHub Actionsを使う必要が出てきたのでスクラップにする。
  • 現状は簡単な自動テンプレートをpythonのテストしたくたいのレベル
Iku YamamotoIku Yamamoto

初期設定

  1. .github/workflow ディレクトリを作成する
  2. 上記ディレクトリに任意の名称のyamlファイルを配置
  3. yamlにjob内容を記載すればOK

Quick Start

  • 以下によしななワークフローのテンプレートがあるのでお試しならここでもよさげ
    しかも、GitHubが最初にサジェストしてくれる
Iku YamamotoIku Yamamoto

いくつかスターターを見てみる

※なんとなくで見るので違うところはありそう

  • 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の表示名

もし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

Iku YamamotoIku Yamamoto

実行環境

GitHub hoster runnerとself hoster runnerを選べる

GitHubのhosted runner

https://docs.github.com/ja/actions/using-github-hosted-runners/about-github-hosted-runners

  • 概要

    各 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 を使えるので管理者権限でなんでもできる

self hosted runner

https://docs.github.com/ja/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners

  • 概要

    セルフホストランナーは、プライベートリポジトリでのみ利用することをおすすめします。 これは、ワークフロー内でコードを実行する pull request を作成することで、パブリック リポジトリのフォークによって、セルフホステッド ランナー マシン上で危険なコードが実行される可能性があるからです。

Iku YamamotoIku Yamamoto

課金について

https://docs.github.com/ja/billing/managing-billing-for-github-actions/about-billing-for-github-actions

  • パブリックレポジトリ

パブリック リポジトリの標準の GitHub ホステッド ランナーとセルフホステッド ランナーの場合は無料です。

  • プライベートレポジトリ

プライベート リポジトリの場合、アカウントのプランに応じて、GitHub ホステッド ランナーでの使用を対象として、一定量の無料の使用時間 (分) とストレージが各 GitHub アカウントに付与されます。 含まれる量を超える使用は、使用制限によって制御されます。

  • 使用制限機能
    • ベースは0になっているので予算以上の使いすぎを防げる
    • AzureのサブスクリプションIDを接続して支払いも連携できる
  • 金額
    • ストレージ
      • 0.008 [USD/(GB * day)]
    • リソース
  • 課金量計算サイト: https://github.com/pricing/calculator?feature=actions