はじめに
今回はDockerでサクッとSelf-Hosted-Runnerを作ってGithub Actionsと連携するところまでやります。
なぜ、Self Hosted Runnerを使うのか?という話ですが、
Github Actionsでは、プライベートリポジトリでSaaS形態のRunnerを利用する場合に
以下のような制約があります。(※フリープランの個人の場合)
- 無料枠:2000分/月
- ストレージ;500MB
そこでローカル環境にSelf-Hosted Runnerを構築することで、
プライベートリポジトリに対して無料でGithub Actionsが実行し放題になる訳です!
またSelf-Hosted-Runnerの場合は、独自のカスタマイズも可能になになります。
実行環境
- OS;macOS
- コンテナ環境:DockerDesktop
コンテナで作るので、OSはWindowsでも構いません。
構築手順
今回はmyoung34さんがRunnerのイメージを作ってくださっているので、使わせていただきます!
事前準備として、Githubのリポジトリの画面からACCESS_TOKENを取得しておきます。
RUNNER_TOKENでも良さげだが、有効期限が短かったり、更新対応が必要だったりするみたいなので、今回はACCESS_TOKENを使用することにしました。
1.docker-compose.yamlの作成
RUNNER_NAMEやLABELSは、ご自身が識別しやすい名前にしてください。
version: '2.3'
services:
worker:
image: myoung34/github-runner:latest
environment:
REPO_URL: https://github.com/example/repo
RUNNER_NAME: example-name # 任意のRunner名
ACCESS_TOKEN: ghp_XXXXXXXXX
RUNNER_WORKDIR: /tmp/runner/work
RUNNER_SCOPE: repo
LABELS: my-runner # 任意のラベル名
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./tmp/runner:/tmp/runner
- ./runner/data:/runner/data # データの永続化が必要な場合のみ
ちょっとバージョン2.3は気になりますが、大体はsampleで書かれているやつを使ってます。
必要に応じて書き換えてください。
2.docker composeの実行
コンテナ実行コマンド
docker compose up -d
ログを確認コマンド
docker compose logs
ログを確認して「√ Connected to GitHub」と出ていれば、Githubとの連携はできています。

GithubのリポジトリからActions > Runners > Self-hosted runnersを確認して、
以下のようにRunnerが追加されていればOKです。

(docker-compose.yamlと、RUNNER_NAMEと、LABELSは変えているので気にしないでください。)
さいごに
Self-hosted runnerを構築するのは、意外と手間がかからないので是非試してみてください。
これでプライベートリポジトリでも、Github Actionsを無料でぶん回せます!
あとはワークフローのYAMLファイルを作れば、簡単に実行できます。
個人的にはワークフローのruns-onでRunnerを実行するときに、LABELSを設定していた方が指定しやすいので、設定することをオススメします。
気が向けば、RunnerにAWS CLIをインストールしてコンテナイメージをECRに登録する記事とかを書こうかなと思います。
この記事がどなたかの参考になれば幸いです。