ABCABC Tech Catalog
アプリ/業務効率化

Github Actionsのself-hosted runnerを導入してみた

社内オンプレミス環境でもGithub Actionsを使いたい

GitHub Actionsをオンプレミス環境に適用する際の課題

GitHub Actionsのようにインターネット上のサービスでは、デプロイの対象となる計算機へ直接アクセスを行ってデプロイを実現することが一般的かと思います。

しかし、社内オンプレミス環境のサーバにデプロイしようとすると、APIのように外部から呼び出してデプロイを行うといった手段を取れない、プロキシ経由で外部接続する必要がある等、悩ましいポイントが出てきます…

self-hosted runnerとは

Github Actionsには、2種類のrunnerが存在します

  • Github-hosted runner
  • self-hosted runner

self-hosted runnerは、自身のサーバにセットアップし、そこでworkflowを実行する方式です。

self-hosted runnersを使用すると実行環境を自分で指定することができるので、オンプレミス環境でworkflowを実行したい場合や、閉鎖環境内でしか実行できない場合など、自前で用意した特殊な実行環境で実行したい時に便利です。

詳しくは公式ドキュメントをご参照ください。

self-hosted runnerの実装手順

Githubコンソール側の設定

GithubコンソールのSettings > Runnnerから[New self-hosted runner]を選択すると、サーバ側で実装すべき手順が表示されます。

file1

デプロイ先サーバ側の設定

基本的には上記でコンソールに表示されたランナーの実装手順に従えばOKです。

事前にself-hosted runner用のユーザーを作成しておく

# runnerユーザーの作成
sudo useradd -m runner -s /bin/bash
sudo passwd runner

# ワークフロー実行中にsudoパスを聞かれないようユーザー設定を仕込んでおく
sudo su
echo "runner ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/runner

self-hosted runnerをダウンロード

# ランナーのディレクトリを作成
mkdir actions-runner && cd actions-runner

# ランナーのパッケージをダウンロード
curl -o actions-runner-linux-x64-2.285.0.tar.gz -L https://github.com/actions/runner/releases/download/v2.285.0/actions-runner-linux-x64-2.285.0.tar.gz

# ハッシュを検証
echo "93ac1b7ce743ee85b5d386f5c1787385ef07b3d7c728ff66ce0d3813d5f46900  actions-runner-linux-x64-2.320.0.tar.gz" | shasum -a 256 -c

# パッケージを展開
tar xzf ./actions-runner-linux-x64-2.285.0.tar.gz

self-hosted runnerの設定

# ランナーを設定(GitHubから提供されるトークンを使用)
./config.sh --url https://github.com/OWNER/REPO --token YOUR_TOKEN

# ランナー実行
./run.sh

これでランナーが動くようになります。

ちなみに、ランナーの自動起動設定をしたい場合は…

self-hosted runnerアプリケーションをサービス化するためのスクリプトが用意されております。

こちらを使うと、ランナーをサービスとして使用して管理できるので便利です!

ワークフロー側の設定

ワークフロー内のruns-on:において、self-hosted runnerのラベルを指定します。

(デフォルトでself-hostedのラベルが付いているので、基本的にはruns-on: self-hostedとしておけばOKです。)

その他はGithub-hosted runnerの場合と記述方法は同じです!

↓ラベルはコンソールからも確認できます。

file2

ちなみに、複数ランナーを実行する場合は、このラベルを活用していく事になります。

以上で連携は完了になります。

self-hosted runnerを起動しておく事で、定期的にGitHubサーバに問い合わせを行い、GitHub Actionsのキューからジョブを受け取ると、サーバ環境でそのジョブを実行する、といった流れになります。

まとめ

連携自体はかなり簡単に実装する事ができました。

サービスとして構成する為のスクリプトやランナーを管理する為のラベルなども用意されており、カスタマイズしてさらに便利に使っていけそうです!

オンプレミスの閉鎖環境だったりで、CI/CD構築で悩まれている方は是非こちらお試し下さい。

AUTHOR

金谷 洋佑

朝日放送テレビ株式会社 技術局 技術開発部

動画・広告配信を主に取り組んでおり、その傍らでシステムのモダナイズの提案・支援や開発も担当。アプリケーションからネットワーク・セキュリティ・インフラまで幅広く励んでます!

WORK@ABC

技術力を培うための
環境と文化

ABCに昔から根付く「自分たちで開発する」文化を支える環境や取り組みをご紹介します
ABCについてもっと知る