社内オンプレミス環境でも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]を選択すると、サーバ側で実装すべき手順が表示されます。
デプロイ先サーバ側の設定
基本的には上記でコンソールに表示されたランナーの実装手順に従えば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の場合と記述方法は同じです!
↓ラベルはコンソールからも確認できます。
ちなみに、複数ランナーを実行する場合は、このラベルを活用していく事になります。
以上で連携は完了になります。
self-hosted runnerを起動しておく事で、定期的にGitHubサーバに問い合わせを行い、GitHub Actionsのキューからジョブを受け取ると、サーバ環境でそのジョブを実行する、といった流れになります。
まとめ
連携自体はかなり簡単に実装する事ができました。
サービスとして構成する為のスクリプトやランナーを管理する為のラベルなども用意されており、カスタマイズしてさらに便利に使っていけそうです!
オンプレミスの閉鎖環境だったりで、CI/CD構築で悩まれている方は是非こちらお試し下さい。