Amazon EKSクラスターにHelmを使ってGitLab Runnerをインストールしてみる
GitLab Runnerとは
以下の記事をご確認ください。
やってみた
GitLab Web GUIからRunnerを作成・トークン発行
GitLabとGitLab Runnerの通信は「プル型」アーキテクチャを採用しています。
Runner側からGitLabへ接続をする形です。
接続のためにGitLab側では、Runnerの作成及びトークン発行を行う必要があります。
今回はGitLabインスタンス内のすべてのプロジェクトで利用できる共有ランナーを設定します。
Search
-> Admin Area
->CI/CD
-> Runners
-> New instance runner
の順に選択します。
任意のTags
を設定します。
Run untagged jobs
をチェックして、タグ付けされていないジョブも実行できるようにします。
Create runner
を選択します。
Registrer runner
の画面に遷移します。
Helmインストール時にTokenを使いますので、控えておいてください。
ここまでできたら、EKS側の作業にはいります。
GitLab RunnerをHelmでインストール
まずはgitlab-runner
用のnamespaceを作成します。
kubectl create namespace gitlab-runner
values.yaml
を用意します。今回は検証用のため、最低限の設定とします。
GitLabのURLと、先ほど発行したTokenをセットします。
gitlabUrl: https://gitlab.example.com/ # 環境に合わせて置き換える
runnerRegistrationToken: "<Token>"
rbac:
create: true
helmでリソースをデプロイします。
helm install --namespace gitlab-runner gitlab-runner -f values.yaml gitlab/gitlab-runner
NAME: gitlab-runner
LAST DEPLOYED: Mon Mar 17 19:31:53 2025
NAMESPACE: gitlab-runner
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://gitlab.example.com/"
Runner namespace "gitlab-runner" was found in runners.config template
helm repoの追加がまだの場合や、Helmチャートの詳細が気になる場合は以下をご確認ください。
deploymentsやpodsが稼働していれば、正常です。
kubectl get deployments.apps -n gitlab-runner
NAME READY UP-TO-DATE AVAILABLE AGE
gitlab-runner 1/1 1 1 4m39s
kubectl get pod -n gitlab-runner
NAME READY STATUS RESTARTS AGE
gitlab-runner-6887758ccf-hctk6 1/1 Running 0 5m27s
動作確認
GitLab上からRunnerを確認してみます。
Search
-> Admin Area
-> CI/CD
-> Runners
の順に確認すると、以下のようにRunnerが表示されます。
実際にRunnerを動かしてみます。
テスト用の設定ファイルを作成して、GitLabにMerge Requestを作成します。
stages:
- test
- build
- deploy
# 簡単なテストジョブ
test_job:
stage: test
image: alpine:latest
script:
- echo "Running test job..."
- ls -la
- pwd
# ビルドジョブの例
build_job:
stage: build
image: node:16-alpine
script:
- echo "Running build job..."
- node -v
- npm -v
- echo "Building application..."
- sleep 10 # 擬似的なビルド時間
- echo "Build completed!"
# デプロイジョブの例
deploy_job:
stage: deploy
image: alpine:latest
script:
- echo "Running deploy job..."
- echo "Deploying to test environment..."
- sleep 5 # 擬似的なデプロイ時間
- echo "Deploy completed!"
environment:
name: test
Merge Requestを確認するとパイプラインが動作していることを確認できました。
おまけ: EKSクラスターにデプロイしたGitLab側のGitLab Runnerを無効化する
GitLab自体もEKSクラスターでセルフホストしている場合もあると思います。
Helmデプロイ時にデフォルトでEKSクラスター上でGitLab Runnerは有効になります。
別で管理したい場合は、以下を追加することでGitLab側のGitLab Runnerを無効化できます。
gitlab-runner:
install: false
ちなみに、公式ドキュメントには以下の記載があり、本番環境ではGitLabとは別のマシンで稼働させることが推奨されています。
The default configuration of the included GitLab Runner chart is not intended for production. It is provided as a proof of concept (PoC) implementation where all GitLab services are deployed in the cluster. For production deployments, install GitLab Runner on a separate machine for security and performance reasons.
付属の GitLab Runner チャートのデフォルト構成は、本番環境向けではありません。これは、すべての GitLab サービスがクラスターにデプロイされる概念実証 (PoC) 実装として提供されています。本番環境のデプロイメントでは、 セキュリティとパフォーマンス上の理由から、GitLab Runner を別のマシンにインストールしてください。
Using the GitLab Runner chart | GitLab Docs
おわりに
GitLab RunnerをEKSクラスターにインストールしてみました。
次の記事では、GitLabとGitLab Runnerを同一EKSクラスターで動作させつつ、別ノードで実行する方法を検証しようと思います。