🦊

Cloud Source Repositories が販売終了するらしいから GitLab に移行しよう

2024/06/06に公開

はじめに

こんにちは!クラウドエース SRE 部の kazz です。
先日、Cloud Source Repositories(以下 CSR)の販売終了が、2024 年 6 月 17 日に予定されているというアナウンスがありました。
https://cloud.google.com/source-repositories/docs/release-notes

しかし、新規で CSR を利用することができないのは不便であり、さらに今後も継続して利用できるかどうか保証されていないため、CSR を使い続けるのは少々不安です。
そこで、代替サービスとして GitLab を使用することをおすすめします! GitLab は、CSR の機能や特徴を多くカバーしています。
今回はそんな GitLab の構築方法や CSR からのリポジトリの移行方法について解説していきます。

Cloud Source Repositories について

CSR は Google Cloud 上で提供されているプライベート Git リポジトリサービスです。
このサービスを利用することで、以下のような要件に対応することができました。

  • Cloud Build などの Google Cloud のサービスとシームレスに統合したい
  • システムを Google Cloud 内で完結させたい
  • リポジトリを GitHub 以外の場所に保存したい

GitLab について

https://about.gitlab.com
GitLab は、オープンソースの DevSecOps プラットフォームであり、Git リポジトリの管理などのサービスを提供しています。
GitLab は Google Cloud 上にホストすることが可能で、Cloud Build などのサービスともネイティブに連携できます。これにより、CSR が提供していた機能の大部分をカバーすることができます。
CSR のようなサービスを新規に利用したい、または CSR から他のサービスに移行したいと考えている場合、GitLab の採用がおすすめです。

GitLab の構築

ライセンス オプションの選定

早速 GitLab を構築していきましょう。まず、要件に合ったライセンス オプションを選択します。
GitLab は、OSS の Community Edition (CE) 版と、Enterprise Edition (EE) 版の 2 つのエディションがあります。
https://about.gitlab.com/install/ce-or-ee/
1
ce-or-ee | GitLab より

さらに、EE 版には Free, Premium, Ultimate の 3 つの Tier が存在します。
また、それぞれの Tier には SaaS 版と Self-Managed 版が存在します。
https://about.gitlab.com/ja-jp/pricing/
2
Pricing | GitLab より

Premium 以上の Tier ではライセンス費用が発生するので、予算や要件に合わせて選択しましょう。
本記事では Self-Managed の Free Tier をベースに進めていきますが、一部 Premium 以上の Tier でしかできない機能も紹介します。

構築方法の選定

システムを Google Cloud 内で完結させたいので、Google Cloud に GitLab を構築していきます。
Google Cloud に GitLab を構築する方法として、以下の 2 つの選択肢があります。

  • 自分でサーバーを構築し、GitLab をインストールする
  • GitLab Toolkit を使う

GitLab は、利用想定のユーザー数に応じて、構成が大きく、複雑になります。
そのため、大人数で使用する GitLab を構築する場合は、Toolkit を使うと楽になりますが、少人数用の GitLab 構築に Toolkit を使うとかえって煩雑になってしまいます。
今回は自分で Google Compute Engine(以下 GCE)インスタンスを構築し、そこに GitLab をインストールしていきます。

構築作業

https://gitlab-docs.creationline.com/ee/install/google_cloud_platform/
公式の手順に沿って作成していきます。

Google Compute Engine インスタンスの作成

今回は以下のスペックのインスタンスを作成します。n1-standard-8 で 最大 1000 人のユーザーの使用に耐えられます。

  • マシンタイプ: n1-standard-8(8 vCPU、4 コア、30 GB メモリ)
  • ブートディスク: 10 GB / Ubuntu 20.04 LTS

https://docs.gitlab.com/ee/administration/reference_architectures/1k_users.html

コンソールから作成する場合は、[ファイアウォールで HTTP トラフィックを許可する] にチェックを入れておきましょう。
GitLab へアクセスできるように適切なネットワーク設定をしてください。
3

インスタンスが作成できたら、次の作業に移る前に IP アドレスを確認します。
今回はインスタンスについた外部 IP アドレスをそのまま GitLab のドメイン名に使用するので、エフェメラル IP から静的 IP に昇格させておきましょう。
4

インストール

インスタンスを作成できたら、GitLab をインストールしていきましょう。
https://about.gitlab.com/install/#ubuntu
以下は公式のインストール ガイドから抜粋したコマンドです。{EXTERNAL_IP} を GCE の外部 IP に置き換えて実行します。

sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
sudo EXTERNAL_URL="http://{EXTERNAL_IP}" apt-get install gitlab-ee

インストールが完了したら、GCE の外部 IP にアクセスし、サインインしてみましょう。
root ユーザーのパスワードは以下のコマンドで出力できます。

sudo grep "Password:" /etc/gitlab/initial_root_password

GitLab の画面が表示されます!
5

リポジトリを移行

CSR からリポジトリを移行する方法として、以下の 2 つの選択肢があります。

  • ローカル環境を経由して手動で移行する
  • CSR リポジトリと GitLab リポジトリをプル ミラーリングする

GitLab で外部のリポジトリをプル ミラーリングするには、Premium 以上の Tier でなければならないことに注意してください。
本記事では両方の移行方法を紹介していきます。

ローカル経由で移行

まず、新規のリポジトリを用意しましょう。
空にするために、画像で赤く囲んであるチェックは外しましょう。
6

移行先のリポジトリが準備できたら、CSR リポジトリを開き、[クローンを作成] を展開し、SSH 認証のコマンドをコピーします。
7

ローカル端末でコマンドを実行し、リポジトリをクローンします。
クローンしたリポジトリのディレクトリに移動し、{TARGET_REPO} に移行先のリポジトリを入力して実行します。

git remote set-url origin {TARGET_REPO}
git push -u origin

GitLab でリポジトリを確認し、push されていることを確認します。
8

プル ミラーリング

GitLab でプル ミラーリングを構成すると、参照元の外部リポジトリから GitLab のリポジトリに直接コードやコミットログをコピーすることができます。
プル ミラーリングは、30 分毎に自動的に参照元のリポジトリから変更を取得します。また、参照元のリポジトリを削除した場合でも、GitLab 側でコピーしてあるリポジトリの内容は保持されます。
この機能は、GitLab が Premium 以上の Tier でないと使えず、少々手順も面倒になりますが、しばらくの間 CSR と並行して使いたい、ローカルを経由した移行をしたくないといった要件に対応できます。

ミラーリングを構成する

こちらの方法も、まず新規のリポジトリを用意しましょう。
空にするために、画像で赤く囲んであるチェックは外しましょう。
6
移行先のリポジトリが準備できたら、一度 CSR リポジトリを開き、[クローンを作成]を展開し、SSH 認証のコマンドをコピーします。
7
GitLab に戻り、移行先のリポジトリで [設定] > [リポジトリ] を選択し、ミラーリング リポジトリを展開します。
[Git repository URL] に、先ほどコピーしたコマンドをペーストし、先頭の git clone を削除して、ssh://~ から始まる URL を入力します。
9

[Mirror direction] が Pull になっていることを確認し、Detect host keys をクリックします。
これにより、CSR の SSH フィンガープリント が保存されます。
10

[Authentication method] を SSH public key に切り替え、[Username] に Google Cloud アカウントのメールアドレスを入力します。
いくつか選択項目がありますので、必要に応じてチェックを入れます。

  • Overwrite diverged branches: ローカル ブランチがリモート ブランチと分岐している場合、自動的に更新されないようにする機能
  • Trigger pipelines for mirror updates: アップストリーム リポジトリでブランチやタグが更新されたときにパイプラインをトリガーする機能
  • Mirror Branches: ミラーリングするブランチを選択する機能

今回は一度きりのミラーリングなので、すべてそのままにしておきます。
設定が終わったら、[Mirror repository] をクリックします。
11

SSH キーを追加する

ミラーリポジトリにエントリーが追加されているので、クリップボード ボタンをクリックして SSH 公開キーをコピーします。
12

CSR リポジトリに戻り、ページ右上の 3 つの点のメニューから、[SSH 認証鍵の管理] を開きます。
[SSH 認証鍵を登録] をクリックし、コピーした公開鍵をペーストし、登録します。
13

GitLab に戻り、エントリーのアップデート ボタンをクリックします。
14

リポジトリを確認し、コードなどがコピーされていることを確認します。
15

まとめ

本記事では、CSR の代替サービスとして GitLab の構築方法、移行方法を紹介しました。
これらの情報が、CSR の販売終了に伴う移行や代替サービスの選択に役立てれば幸いです。

Discussion