検証環境
- Ubuntu 22.04
Runner追加
- GitHubにリポジトリを追加
- Settings > Actions > Runnersからランナーを追加

- 追加する画面にいくと以下のように追加手順が表示されるので、ランナーとなるマシンにSSHログインし実行する

config.shを実行すると以下のようにインタラクティブな設定に入ります。今回はデフォルトのままで十分だと思いますが、ランナーを複数保持する場合は見分けがつくようにした方がいいかもしれません。

Enter the name of the runner group to add this runner to: [press Enter for Default]
- ランナーグループを指定します。デフォルトは「Default」です。
Enter the name of runner: [press Enter for {{Hostname}}]
- ランナー名を指定します。デフォルトはランナーが動くホストの「ホスト名」です。
This runner will have the following labels: 'self-hosted', 'Linux', 'X64' Enter any additonal labels (ex. label-,label-2): [press Enter to skip]
- self-hosted runnerにつけるラベルを追加できます。デフォルトで
self-hostedOSArchitectureが付与されています。
- self-hosted runnerにつけるラベルを追加できます。デフォルトで
Enter name of work folder: [press Enter for _work]
- このランナーのワーキングディレクトリを指定します。デフォルトは「_work」です。
ここまでエラーなく完了したら、run.shを実行してIdle状態にしておきます。


このままではこのホストから抜けることができません。run.shが自動実行されるようにしておきましょう。
sudo ./svc.sh install $USER
svc.shを実行するとSystemdにサービスが登録され、再起動後も自動実行されるようになります。./svc.sh installの引数に実行するユーザーのユーザー名の指定を忘れないでください。ちなみにUnitの中身はこのようになっていました。

Workflow追加
では実際にself-hosted runnerを動かせるようWorkflowを追加します。
self-hosted runnerを設定したリポジトリをCloneして.github/workflows/main.yamlを作成してください。
main.yamlの中身は以下です。
on: push
jobs:
hello:
runs-on: self-hosted
steps:
- run: echo 'Hello World!'
GitHubにpushするとActionsが動き出します。


動いてる最中にRunnerの画面を確認すると以下のように実行されているのがわかります。


Runner削除
最後に片付けをして終わります。
Settings > Actions > Runnersから削除したいランナーを選んでクリックします。右上に赤いDeleteボタンがでているのでポチ。

赤枠の通り、ランナー側でも削除処理を実行して完了です。
まとめ
簡単に追加することができました。独自のビルド環境が必要な場合や、Enterprise版、ジョブの実行時間が長すぎる場合なんかはself-hosted runnerを検討してもいいかもしれません。その一方でデメリットもありそうです。メンテナンスの手間は必ず増えますし、github-hostedとself-hostedでは入っているパッケージも違います。github-hostedなイメージはコチラから確認できます。
