【gitlab】バックアップとリストア、バージョンアップ、環境移行 | SEの道標
OSS

【gitlab】バックアップとリストア、バージョンアップ、環境移行

環境

  • Rocky Linux 9.1 (kernel 5.14.0-162.18.1.el9_1.x86_64
  • gitlab version 15.8 -> 15.9
  • gitlab はソースコードではなく dnf ( Omnibus package ) を利用

gitlab のバックアップ

基本的に以下サイトの通りに実行。

Back up GitLab | GitLab
GitLab product documentation.

gitlab 12.2 以降は gitlab-rake ではなく gitlab-backup コマンドを使う。

$ sudo gitlab-backup create
Ver 15.8 で試したところ gitlab-rake gitlab:backup:create でも下位互換で同じ効果があるっぽい

加えて、/etc/gitlab/gitlab-secrets.json と /etc/gitlab/gitlab.rb もバックアップしといた方が良い。もしこれらのファイルをリストアしない場合、一見うまく戻ったように見えるが、全体の設定変更をしたときに 500 Server Error になり、以下の通り一部の DB 初期化を実行して直った。

[root@git ~]# gitlab-psql
gitlabhq_production=# UPDATE projects SET runners_token = null, runners_token_encrypted = null;
gitlabhq_production=# UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
gitlabhq_production=# UPDATE application_settings SET runners_registration_token_encrypted = null;
gitlabhq_production=# UPDATE ci_runners SET token = null, token_encrypted = null;
gitlabhq_production=# exit

また、/etc/gitlab/gitlab.rb をデフォルト設定から変更している場合はこちらもバックアップしておく。

その他 TLS 証明書や SSH 鍵の設定情報なども必要に応じて。(ただし、ユーザープロファイルの SSH 公開鍵はバックアップに含まれている様子。リストア時に公開鍵が登録されていたことを確認できた。)

ちなみに、tar じゃなくて tar.gz (tgz) がいいのに、と思ったのだが、ファイルの中身としては gzip したものを tar しているようなので実質 tgz になっている。

gitlab のリストア

基本的に以下サイトの通りに実行。

Restore GitLab | GitLab
GitLab product documentation.

リストアはバックアップで取得した tar ファイルを /var/opt/gitlab/backups/ に配置し、ファイル所有者を git に変更する。

$ sudo cp 1679481311_2023_03_22_15.8.1_gitlab_backup.tar /var/opt/gitlab/backups/
$ sudo chown git:git /var/opt/gitlab/backups/1679481311_2023_03_22_15.8.1_gitlab_backup.tar

そして次に puma と sidekiq だけ停止する。

$ sudo gitlab-ctl stop puma
$ sudo gitlab-ctl stop sidekiq
$ sudo gitlab-ctl status

そして以下コマンドでリストア。

$ sudo gitlab-backup restore BACKUP=1679481311_2023_03_22_15.8.1

BACKUP= には tar ファイルの最後の _gitlab_backup.tar を省いたものを指定する。

仕上げに reconfigure して restart して check。

$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart
$ sudo gitlab-rake gitlab:check SANITIZE=true

バージョンアップ

今回は 15.8 から 15.9 にアップデートしてみた。

dnf で最新版を再インストール。

$ sudo dnf install gitlab-ce

reconfigure して restart して check。

$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart
$ sudo gitlab-rake gitlab:check SANITIZE=true

なお、今回は minor version up だったため問題なかったが、大きくバージョンアップするときはアップグレードパスに従って、指定されたバージョンを経由する必要性が生じる可能性がある。

Upgrade GitLab | GitLab
Latest version instructions.

トラブルシュート

移行時や gitlab runner インストール時にエラーになったので対処法の備忘メモ。

500  something went wrong. のエラーが表示されたら以下を実行したのちに事象を再現させる。

# tail -f /var/log/gitlab/gitlab-rails/production.log

以下などが確認された場合、

ActionView::Template::Error ():
    1: - breadcrumb_title _('Runners')
    2: - page_title _('Runners')
    3:
    4: #js-admin-runners{ data: admin_runners_data_attributes }

lib/gitlab/crypto_helper.rb:28:in `aes256_gcm_decrypt'

以下で対処。

# gitlab-rails dbconsole

-- Clear project tokens
UPDATE projects SET runners_token = null, runners_token_encrypted = null;

-- Clear group tokens
UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;

-- Clear instance tokens
UPDATE application_settings SET runners_registration_token_encrypted = null;

-- Clear runner tokens
UPDATE ci_runners SET token = null, token_encrypted = null;
# gitlab-rails dbconsole
SELECT * FROM ci_variables;
DELETE FROM ci_variables WHERE project_id='XX';
# gitlab-rails console
> ApplicationSetting.first.delete
> ApplicationSetting.first

 

コメント

タイトルとURLをコピーしました