GitLabのCI/CD環境をRancherでインストール (1) - サービスの構築

RancherでGitLabをインストールし、GitLab Container RegistryやGitLab Runnerを連携させてCI/CD環境を構築する手順です。NFSへの永続化やバックアップも考慮します。この記事で個々のサービスの構築までを行います。

目的

次の流れを自動化します。

  1. GitLabにコードをコミット(手作業)
  2. コミットをトリガーにして自動的に単体テストやビルドを実行
  3. ビルド結果からDockerイメージを作成してプライベートレジストリに登録
  4. Rancherを使ってプライベートレジストリに登録されたイメージをデプロイ(手作業)

単体テストやビルドを実行するのがGitLab Runner、プライベートレジストリがGitLab Container Registryです。

前提

Rancherなどのセットアップは完了している前提です。 これまでの流れは下記の記事に書いています。

名前空間について

gitlab(任意)などの名前を付けて、以降の作業で同じ名前空間を使用してください。

永続ボリュームの作成

今回は、NFSを永続ボリュームとして使用しますが、要件に応じて別のボリュームを作成しても構いません。

以下は、NFSサーバーのホストが nas.home として名前解決でき、データの保存先を /Server/rancher/gitlab とする場合の設定内容です。 環境に合わせて読み替えてください。

永続ボリュームを作成するには、Rancherのメニューからクラスターを選択し、「ストレージ」 > 「永続ボリューム」をクリック、「ボリュームを追加」ボタンをクリックします。

項目入力例備考
名前gitlab任意の名前
ボリュームプラグインNFS共有
パス/Server/rancher/gitlab任意のパス
サーバーnas.home任意のホスト

ワークロードの作成

Rancherメニューからプロジェクトを選択して、「ワークロード」の「デプロイ」をクリックしてワークロードを作成します。

GitLabワークロードの作成

GitLab CE (Community Edition) をインストールします。 GitLab Container Registryも仮想ホストとしてインストールされます。

注意点として、GitLabの実行にはメモリが4GB以上利用可能であることが推奨されています。 利用可能なメモリが少ない場合、起動に時間が掛かったりエラーになる場合があります。 メモリが十分に存在する場合でも、GitLabが起動して利用可能になるまでには数分~数十分掛かります。 その間にWebページにアクセスするとサーバーエラー画面が表示されますが、しばらく待ってからアクセスすると正常に画面が表示されます。

項目入力例備考
名前gitlab任意の名前
イメージgitlab/gitlab-ce:12.6.0-ce.0https://hub.docker.com/r/gitlab/gitlab-ce/を参照
ラベルbackup=gitlabバックアップタスクがこのコンテナを見つけるためのラベル(続きの記事で説明)

環境変数

内容は環境に合わせて置き換えてください。

GITLAB_OMNIBUS_CONFIG
external_url 'http://gitlab.home'
registry_external_url 'http://registry.gitlab.home'
gitlab_rails['registry_host'] = 'registry.gitlab.home'
gitlab_rails['registry_port'] = 80
gitlab_rails['gitlab_shell_ssh_port'] = 22
gitlab_rails['time_zone'] = 'Asia/Tokyo'
gitlab_rails['backup_keep_time'] = 60
prometheus_monitoring['enable'] = false

ホストの名前は任意です。後述のイングレスに指定するホスト名と合わせてください。

backup_keep_time は、バックアップの度に指定した秒数よりも古いバックアップが削除されます。 60(秒)を指定しているのは、事実上直近のバックアップしか保持しないということです(別の方法で世代管理するのであれば不要なため)。 必要に応じてバックアップの保存期間を変更してください。

ボリューム

まずは、「ボリュームを追加」ボタンから「新しい永続ボリューム(要求)を作成」を選択して、作成済みの永続ボリュームに対する要求を作成します。 ここでは gitlab という名前で作成した前提で進めます。 その後、次の内容でボリュームを作成します。

項目入力例備考
ボリューム名gitlab任意の名前
ボリュームタイプ永続ボリューム要求
永続ボリューム要求gitlab前記の手順で作成
マウントポイントボリューム内サブパス
/var/opt/gitlabgitlab/opt
/var/log/gitlabgitlab/log
/etc/gitlabgitlab/etc

GitLab Runnerワークロードの作成

GitLab RunnerはCI/CDのパイプラインでビルドなどを実行するサービスです。こちらもRancherで立ち上げます。

項目入力例備考
名前gitlab-runner任意の名前
イメージgitlab/gitlab-runner:v12.6.0https://hub.docker.com/r/gitlab/gitlab-runnerを参照
GitLabのバージョンと合わせる

ボリューム

項目入力例備考
ボリューム名gitlab任意の名前
ボリュームタイプ永続ボリューム要求
永続ボリューム要求gitlabGitLabのワークロード作成時に作成
マウントポイントボリューム内サブパス
/etc/gitlab-runnergitlab-runner/etc

ジョブでDockerイメージのビルドなどを行う場合は次のように設定します。 方法はいくつかありますが、次はDockerソケットバインディングを使用する方法です。 その他の方法は https://docs.gitlab.com/ce/ci/docker/using_docker_build.htmlを参照してください。

「ボリュームを追加」から「ノードからディレクトリをバインド」をクリックして、以下を入力します。

項目入力例備考
ボリューム名docker-sock
ノード上のパス/var/run/docker.sock
ノード上のパス条件既存のソケット
マウントポイント/var/run/docker.sock
ボリューム内サブパス空欄

イングレスの作成

Rancherメニューからプロジェクトを選択して、「ロードバランサー」の「イングレスを追加」をクリックしてイングレスを作成します。

GitLabのイングレスを作成

項目入力例備考
名前gitlab任意の名前
ルール「使用するホスト名を指定する」
リクエストホストgitlab.home任意のホスト名
パス空欄
ターゲットgitlabGitLabワークロードの名前
ポート80
アノテーションnginx.ingress.kubernetes.io/proxy-body-size=0アップロードサイズのチェックを無効化

リクエストホストはRancherサーバーのIPに解決されるようにDNSを設定してください。

GitLab Container Registryのイングレスを作成

項目入力例備考
名前gitlab-registry任意の名前
ルール「使用するホスト名を指定する」
リクエストホストregistry.gitlab.home任意のホスト名
パス空欄
ターゲットgitlabGitLabワークロードの名前
ポート80
アノテーションnginx.ingress.kubernetes.io/proxy-body-size=0アップロードサイズのチェックを無効化

リクエストホストはRancherサーバーのIPに解決されるようにDNSを設定してください。

まとめ

この記事では、GitLabとCI/CDに必要な各サービスをRancherで稼働させるところまでを行いました。

次の記事では、各サービスを連携させてCI/CD環境を構築します。