|

2024-12-11

Tips

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

GitHub Actions

社内オンプレミス環境でも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]を選択すると、サーバ側で実装すべき手順が表示されます。 image

 

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

基本的には上記でコンソールに表示されたランナーの実装手順に従えば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の場合と記述方法は同じです!

 

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

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

 

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

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

まとめ

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

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

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


この記事の著者

プロフィール画像

金谷 洋佑

朝日放送グループホールディングス株式会社 DX・メディアデザイン局 R&Dチーム

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