当社ではバージョン管理にGitLabを使用しています。当社で使用しているのはクラウド版ではなくオンプレミス版のため、手動でバージョンアップする必要があります。11月5日の終業間際にふとGitLabのアップグレードしてから帰ろうとしたところ、データベースのマイグレーションあたりでエラーが発生。(ログコピーし忘れ)
ダウングレードも試しましたが再構成に失敗\(^o^)/
バックアップは毎日自動で取るようにしていたため、泣く泣くリストアすることにしました。調べながらだとなかなか大変だったため、備忘録として残しておきます。
リストア手順
バックアップファイルをコピー
cp /var/opt/gitlab/backups/$最新のバックアップ.tar ~/
※必要に応じてsudo
を追加してください。(以降も同様)
$最新のバックアップ
の部分は実際の環境に合わせて置換します。例として今回は 1636114057_2021_11_05_14.0.2_gitlab_backup.tar というファイル名でした。バックアップファイルの名前からGitLabのバージョンを確認しておきます。 リストアはバックアップが作成されたときと同じバージョンのGitLabがインストールされている必要があります。
また、バックアップファイルを一度解凍してみることをお勧めします。バックアップの取り方によってはGitリポジトリが含まれていないことがあります。フルバックアップになっていれば「db」ディレクトリと「repositories」ディレクトリが存在するはずです。
設定ファイルをバックアップ
cp /etc/gitlab/gitlab.rb ~/
cp /etc/gitlab/gitlab-secrets.json ~/
サービスを停止
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
GitLabのアンインストール
yum remove gitlab-ce
ゴミファイルの削除
rm -rf /opt/gitlab
rm -rf /var/opt/gitlab
rm -rf /etc/gitlab
rm -rf /var/log/gitlab
rm -f /etc/yum.repos.d/gitlab_gitlab-ce.repo
GitLabのリポジトリを登録
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
バージョン指定でインストール
yum install gitlab-ce-14.0.2-ce.0.el7.x86_64
今回はバックアップファイルのバージョンが 14.0.2 だったため、それに合わせてGitLab 14.0.2 をインストールしています。
設定の再構築
gitlab-ctl reconfigure
リストアするためには一度でも再構築されている必要があるとのこと。とりあえず何も変更していない状態で実行します。
バックアップファイルを配置
cp ~/$最新のバックアップ.tar /var/opt/gitlab/backups/
chown git.git /var/opt/gitlab/backups/$最新のバックアップ.tar
バックアップファイルの所有者が git である必要があるため変更しておきます。
データベースに接続されているプロセスを停止
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
リストア
gitlab-backup restore BACKUP=$最新のバックアップ
※ $最新のバックアップ
は最新のバックアップ.tarから gitlab_backup.tar を抜いたものになります。
設定ファイルを配置
cp ~/gitlab-secrets.json
cp ~/gitlab.rb
GitLabを再構成, 再起動, 確認
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true
これでリストアされました。
https, ssh, ユーザなども全て復元されていて、そのままCloneできることも確認できました。
バージョンアップ手順
当初の目的はバージョンアップだったため、再度バージョンアップに挑戦します。GitLab公式のUpgrade pathsにサポートされているアップグレードパスが記載されています。これを照らし合わせると14.0.2 → 14.0.11 → 14.1.6 という順でアップグレードする必要があることがわかります。
その他バージョン固有のアップグレード手順も記載されています。
- 14.1.0 : BatchedBackgroundMigrationWorkers を待て
- 14.2.0 : BatchedBackgroundMigrationWorkers を待て
- 14.3.0 : Ruby 2.7.4 が必要
- 14.4.0 : Git2.33.x以降が必要
なるほど。今回はRubyの更新が不要な14.2.xの最終バージョン、14.2.6までアップグレードすることにしました。
バージョンを指定してインストール
yum install gitlab-ce-14.0.11-ce.0.el7.x86_64
gitlab-ctl reconfigure
バージョンアップ失敗でびびっていたので、結局 14.0.2 → 14.0.11 → 14.1.6 → 14.2.0 → 14.2.6 のようにアップグレードしていきました。途中 BatchedBackgroundMigrationWorkers の完了を待つ必要があります。GitLabの画面で Admin Area > Monitoring > Background Migrations のところにある Queued が全てなくなるまで待てばOKです。
まとめ
アップグレード前にGitLab公式のUpgrade pathsを確認しましょう。あえて言うならサポートされていないアップグレードパスならアップグレードせずに中止して欲しいものです。
毎日自動バックアップしておいてよかった…と思いつつも、元々検討していたGitHubへの移行により一歩近づいた一件でした。