使用技術
GitHub Actions
- GitHubが提供しているCI/CD
- GitHubにシームレスに統合されており、GitHubとの親和性が高い
- GitHub: https://github.com/actions/runner
- ドキュメント: GitHub Actionsのドキュメント
- GitHub Actionsには以下の2種類の提供方式が存在する
GitHubホステッドランナー
- GitHubがSaaSとしてCI/CDの実行環境を提供する方式
- ジョブ毎にVMを作成することで、ジョブ内での変更が他のジョブへ影響を与えない仕組み
- Publicなリポジトリ or Privateなリポジトリで1ヶ月あたり2,000分以下の実行時間であれば無償
- 作成されるVMのスペックやOSの種類に制限がある
- ドキュメント: GitHub ホステッド ランナーの概要
セルフホステッドランナー
- 自身でサーバを用意してセットアップする方式
- 以下のような条件に当てはまる場合に選定されることが多い
- GitHub Enterpriseを使用する場合
- GitHubホステッドランナーでは社内のセキュリティ要件を満たせない場合
- CI/CDの実行に高いスペックのサーバが必要
- ニッチなOS上でCI/CDを実行したい場合
- CI/CDの実行にかかる費用を抑えたい場合
- ドキュメント: セルフホステッド ランナーの概要
セルフホステッドランナーの構築
必要な情報の確認
- GitHub上に適当なリポジトリを作成する
- Settings > Actions > Runners に移動
- 「New self-hosted runner」を押下
- 今回セルフホステッドランナーを構築するサーバのアーキテクチャはx64で、OSはUbuntu Server 22.04 LTS
- そのため、「Runner image」は
Linux
、「Architecture」はx64
を選択する
- 「Download」からダウンロード先を控えておく
- 「Configure」から
--url
と--token
を控えておく
ランナーのダウンロード
# rootユーザにスイッチ
$ sudo su -
# ダウンロード先となるディレクトリの作成
$ mkdir /opt/actions-runner && cd /opt/actions-runner
# 先ほど控えたダウンロード先からダウンロード
$ curl -o actions-runner-linux-x64-2.303.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.303.0/actions-runner-linux-x64-2.303.0.tar.gz
# ハッシュ値の検証
$ echo "e4a9fb7269c1a156eb5d5369232d0cd62e06bec2fd2b321600e85ac914a9cc73 actions-runner-linux-x64-2.303.0.tar.gz" | shasum -a 256 -c
actions-runner-linux-x64-2.303.0.tar.gz: OK
# tarballの解凍
$ tar xzf ./actions-runner-linux-x64-2.303.0.tar.gz
ランナーの設定
# runnerユーザの作成
# ランナーの実行ユーザとして使用する
$ useradd runner -m
# パスワード無しでsudoコマンドを実行できるようにしておく
$ echo "runner ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner
# カレントディレクトリ以下のファイルの所有者とグループを再帰的にrunnerに変更
$ chown runner:runner . -R
# ランナーの設定
# --urlと--tokenには先ほど控えておいたものを指定する
# --unattendedはインタラクティブモードを無効化するオプション
# --replaceは既存のランナーを上書きして登録するオプション
# --nameはランナーの名称を指定するオプション
$ sudo -u runner ./config.sh --url https://github.com/tyokinuhata/XXXXXXXX --token XXXXXXXX --unattended --replace --name foo-runner
# ランナーのインストール
# runnerユーザとしてランナーが実行されるようにしておく
$ ./svc.sh install runner
# ランナーの実行
$ ./svc.sh start
ランナーの確認
- サーバ上で確認する場合
# ランナーのステータス確認
$ ./svc.sh status
- GitHub上で確認する場合は Settings > Actions > Runners を開く
- ランナーが正常に実行できており、ネットワークの疎通も取れている場合、「Status」は
Idle
になっている - ランナーが正常に実行できていないか、ネットワークの疎通に問題がある場合、「Status」は
Offline
になっている - ランナーがワークフローを実行中の場合、「Status」は
Active
になる
ワークフローの実行
- 作成したリポジトリの
.github/workflows/
以下に適当なワークフローを定義する - 以下のサンプルは
git push
時にhello, world!
をコンソール上に出力する設定
.github/workflows/sample.yml
name: Sample
on:
- push
jobs:
echo:
runs-on: ubuntu-latest
steps:
- name: Hello world
run: echo hello, world!
- その後、GitHub上に
git push
するとワークフローが実行される - 実行過程やステータスは Actions > <ワークフロー名> > <該当コミット> > Jobs > <ジョブ名> から確認できる
ログの確認
# サービス名の確認
$ cat /opt/actions-runner/.service
actions.runner.tyokinuhata-XXXXXXXX.foo-runner.service
# ログの確認
$ sudo journalctl -u actions.runner.tyokinuhata-XXXXXXXX.foo-runner.service
ヘルプの確認
# config.shのその他のオプションは以下のコマンドで確認できる
$ sudo -u runner ./config.sh --help
# svc.shのその他のサブコマンドは以下のコマンドで確認できる
$ ./svc.sh --help
config.shに変更を加えたい場合
# ランナーのアンインストール
$ ./svc.sh uninstall
# 設定の削除
# トークンの入力を求められるため、 Settings > Actions > Runners に移動し、「New self-hosted runner」を押下後、「Configure」からトークンを取得する
$ sudo -u runner ./config.sh remove
# ランナーの設定
# 今回は--nameをfoo-runnerからbar-runnerに変更した
$ sudo -u runner ./config.sh --url https://github.com/tyokinuhata/XXXXXXXX --token XXXXXXXX --unattended --replace --name bar-runner
# ランナーのインストール
$ ./svc.sh install runner
# ランナーの実行
$ ./svc.sh start
# サービス名が変更された
$ cat /opt/actions-runner/.service
actions.runner.tyokinuhata-XXXXXXXX.bar-runner.service
- GitHub上でも Settings > Actions > Runners を開くと、ランナーの名前が
bar-runner
に変更されたことが分かる