GitLabのCI/CD環境をRancherでインストール (1) - サービスの構築
RancherでGitLabをインストールし、GitLab Container RegistryやGitLab Runnerを連携させてCI/CD環境を構築する手順です。NFSへの永続化やバックアップも考慮します。この記事で個々のサービスの構築までを行います。
目的
次の流れを自動化します。
- GitLabにコードをコミット(手作業)
- コミットをトリガーにして自動的に単体テストやビルドを実行
- ビルド結果からDockerイメージを作成してプライベートレジストリに登録
- 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.0 | https://hub.docker.com/r/gitlab/gitlab-ce/を参照 |
ラベル | backup=gitlab | バックアップタスクがこのコンテナを見つけるためのラベル(続きの記事で説明) |
環境変数
内容は環境に合わせて置き換えてください。
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/gitlab | gitlab/opt |
/var/log/gitlab | gitlab/log |
/etc/gitlab | gitlab/etc |
GitLab Runnerワークロードの作成
GitLab RunnerはCI/CDのパイプラインでビルドなどを実行するサービスです。こちらもRancherで立ち上げます。
項目 | 入力例 | 備考 |
---|---|---|
名前 | gitlab-runner | 任意の名前 |
イメージ | gitlab/gitlab-runner:v12.6.0 | https://hub.docker.com/r/gitlab/gitlab-runnerを参照 GitLabのバージョンと合わせる |
ボリューム
項目 | 入力例 | 備考 |
---|---|---|
ボリューム名 | gitlab | 任意の名前 |
ボリュームタイプ | 永続ボリューム要求 | |
永続ボリューム要求 | gitlab | GitLabのワークロード作成時に作成 |
マウントポイント | ボリューム内サブパス |
---|---|
/etc/gitlab-runner | gitlab-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 | 任意のホスト名 |
パス | 空欄 | |
ターゲット | gitlab | GitLabワークロードの名前 |
ポート | 80 | |
アノテーション | nginx.ingress.kubernetes.io/proxy-body-size=0 | アップロードサイズのチェックを無効化 |
リクエストホストはRancherサーバーのIPに解決されるようにDNSを設定してください。
GitLab Container Registryのイングレスを作成
項目 | 入力例 | 備考 |
---|---|---|
名前 | gitlab-registry | 任意の名前 |
ルール | 「使用するホスト名を指定する」 | |
リクエストホスト | registry.gitlab.home | 任意のホスト名 |
パス | 空欄 | |
ターゲット | gitlab | GitLabワークロードの名前 |
ポート | 80 | |
アノテーション | nginx.ingress.kubernetes.io/proxy-body-size=0 | アップロードサイズのチェックを無効化 |
リクエストホストはRancherサーバーのIPに解決されるようにDNSを設定してください。
まとめ
この記事では、GitLabとCI/CDに必要な各サービスをRancherで稼働させるところまでを行いました。
次の記事では、各サービスを連携させてCI/CD環境を構築します。