Distributionチームのインフラとメンテナンスーービルドインフラ

Distributionチームのビルドノードの詳細とメンテナンスタスク

共通リンク

ビルドインフラ

DistributionはGitLab CIを使用してGNU/Linuxパッケージ、Dockerイメージ、AWS AMI、 およびユーザーのマシンにGitLabをインストールするために使用できるその他のアーティファクトをビルドします。 これらのビルドプロセスの多くはより大きな計算能力とリソースを必要とするため、 Distributionはこれらのリソースを提供するための独自インフラを維持しています。

ランナーマネージャーマシン

Distributionチームは2台のランナーマネージャーマシンを管理しています。1台はGitLab.com用、 もう1台はdev.gitlab.org用です。ランナーマネージャーの設定は chef-repoプロジェクトで管理され、 これらの設定と共に使用されるシークレットはVaultで管理されています。

ランナーはrunners-manager-distribution-(com|dev)-(blue|green)-<count>という命名規則を使用しています。

NOTE: これらのランナーマネージャーにはまだブルー/グリーンデプロイメントが設定されていませんが、 Issue 1138では これらのランナーマネージャーマシンでのGitLab Runnerのアップグレードを容易にするためにブルー/グリーン デプロイメントの使用について検討しています。現在は、gitlab.comdev.gitlab.orgそれぞれに 単一の「blue」ランナーマネージャーのみが利用可能です。

ビルドマシン

comdevの両方のランナーは、autoscale設定でdocker-machineエグゼキューターを使用して 同一のマシンをスピンアップします。スピンアップされる各タイプのマシンは以下のとおりです:

  1. distribution-(com|dev)-amd64-runner-gcp - このランナーはGCP上に100GB SSDを備えた n1-highcpu-32マシンをスピンアップし、amd64アーキテクチャ向けのomnibus-gitlab GNU/Linuxパッケージのビルドに使用されます。

  2. distribution-(com|dev)-arm64-runner-gcp - このランナーはGCP上に100GB SSDを備えた t2a-standard-8マシンをスピンアップし、arm64アーキテクチャ向けのomnibus-gitlab GNU/Linuxパッケージのビルドに使用されます。

  3. distribution-(com|dev)-arm64-runner-aws - このランナーはAWS上に100GB SSDを備えた m6g.2xlargeマシンをスピンアップし、armv7アーキテクチャ(Raspberry Pi)向けの omnibus-gitlab GNU/Linuxパッケージのビルドに使用されます。GCPのT2Aマシンは 32ビット命令セットをサポートしていないため使用できませんが、 AWSのGravitonはこれをサポートしているためです。

メンテナンスタスク

前提条件:

  • ノードへのアクセス権。
    • SSHアクセスは、Chef Repoに公開SSHキーとbuildグループアクセスを追加することで付与されます。このアカウント例を参照してください。
  • Chef Vault内の特定フォルダーへのアクセス権。
  • ops chef repoのmasterへのマージ権限。 これは通常チームメンバーには付与されていません。そのためMRを作成後、アクセス権を持つ人物 (主にInfrastructureチームのメンバー)にレビューとマージを依頼してください。

GitLab CIランナーのバージョン変更

Distributionチームのメンバー誰でも実行可能:

  1. ランナーのバージョンを更新するchef repoへの新しいマージリクエストを作成します。

  2. CIがパスし、別のチームメンバーによるレビューが完了していることを確認します。

  3. 変更をchef repoにマージします。

  4. ノードにログインし、以下を実行します。

    sudo /root/runner_upgrade.sh
    

    これによりアップグレードが実行されます。chef-clientサービスを停止し、ランナーを停止して マシンをクリーンアップし、chef-clientを実行して新しいバージョンを取得し、 最後にGitLab Runnerを再起動します。