背景
社内のローカルサーバー運用ルールが変わったことにヘソを曲げたのか、ローカルサーバーのHDDにエラーが多発し運用が困難な状態となった。
AWSにGitlabを構築したが、構築したGitlabはCE 13.4.3であり、社内のローカルサーバーのGitlabはCE 10.3.0であった。
プロジェクトのインポート/エクスポートで対応できると思っていたが、セキュリティの観点からインポートは特定のバージョンからのみ対応しておりすんなりいかなかった。
そこで、CE 10.3.0をローカルに立ち上げ、PC上のGitlabのバージョン更新し、CE 13.4.3まで上げた段階でエクスポートを実施し、AWS上のGitlabにインポートすることにした。
- 背景
- ローカルマシンに引越し用のGitlabを立ち上げる
- 社内ローカルサーバーのGitlabからプロジェクトをエクスポートする
- ローカルマシンのGitlabにプロジェクトをインポートする
- Gitlabバージョンをどんどん更新していく
- ローカルマシンのGitlabからプロジェクトをエクスポートする
- AWS上ののGitlabにプロジェクトをインポートする
- 所感
- (余談)バックアップからの復元
ローカルマシンに引越し用のGitlabを立ち上げる
VM VirtualBoxを使い、仮想マシンを立ち上げる。*1
OS : Ubuntu 18.04 LTS
RAM : 4096MB
HDD : 仮想200GB
起動後は、必要な物をインストールする。(postfixはローカルのみを選択する。)
$ sudo apt-get update
$ sudo apt-get install curl openssh-server ca-certificates
$ sudo apt-get install postfix
次に、Gitlabのリポジトリを登録する。(使わないので、skipしても構わない。)
$ sudo curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
まずはGitlab CE 10.3.0をインストールする必要がある。
バージョン指定することもできるが、ミスをすると面倒くさいのでdebファイルを直接ダウンロードする手法を取る。
debian/stretch/gitlab-ce_10.3.0-ce.0_amd64.deb - gitlab/gitlab-ce · packages.gitlab.com
aptのキャッシュを一旦削除し、ダウンロードしたdebファイルを格納する。その後はapt-getを使い、Gitlab CE 10.3.0をインストールする。
$ sudo wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/debian/stretch/gitlab-ce_10.3.0-ce.0_amd64.deb/download.deb
$ sudo apt-get clean
$ sudo mv gitlab-ce_10.3.0-ce.0_amd64.deb /var/cache/apt/archives/
$ sudo apt-get install /var/cache/apt/archives/*.deb -y
後は、自動的にインストールされるので最後にダメ押しのreconfigureを実行し、問題がないことを確認する。
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-rake gitlab:check
$ sudo gitlab-ctl status
これでGitlab CE 10.3.0が立ち上がる。
社内ローカルサーバーのGitlabからプロジェクトをエクスポートする
ProjectのSettings -> General -> Export Projectでエクスポート可能。
稀にローカルサーバーのスペック不足でエクスポートに失敗することがある。今回は問題が発生しなかったので、このまま継続する。
ローカルマシンのGitlabにプロジェクトをインポートする
New ProjectからImport Projectを選択し、[Gitlab export]を選択する。
先ほどエクスポートしたファイルをアップロードすればインポート完了。この作業はプロジェクトのサイズによってはかなり時間を要するが、多分止まっていないので根気よく待つ。
Gitlabバージョンをどんどん更新していく
Gitlabのバージョンを13.4.3まで更新するわけだが、闇雲に実施していいわけではない。
これを知らないと、後からローカルマシンの環境を何度も作り直さなくてはいけなくなり、しまいにはお手上げとなってしまう危険性がある。
気をつける点は、「Gitlabは更新する際に、経由しなくてはいけないバージョンが多数存在している」事を知ること。
これはどのバージョンからどのバージョンへ更新するかによって大きく変わるため説明は省くが、以下のリンクに記載があるので参考にして欲しい。
今回は10.3.0→10.8.7→11.11.8→12.0.0→12.0.12→12.10.14→13.0.14→13.4.3で実施する。
GitLab release and maintenance policy | GitLab
Gitlab CE 10.3.0 to CE 10.8.7
アップデート手順は先ほどのインストール手順の反復となるので説明は省略するが、wgetでdebファイルを取得し、/var/cache/apt/archive/に配置しインストールする。
インストール後はrestartからreconfigureを実行し、問題がないことを確認する。*2
$ sudo gitlab-ctl restart
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-rake gitlab:check
$ sudo gitlab-ctl status
念のためWebページも開けるか確認しておいたほうが良い。たまにnginxが落ちてたりする。
Gitlab CE 10.8.7 to CE 11.11.8
アップデート方法は[Gitlab CE 10.3.0 to CE 10.8.7]と全く同じなので省略。
ただしアップデート中に「gitlab-ctl pg-upgradeを実行してPostgreSQLのバージョンアップをしてね」というメッセージと「gitlab-ctl prometheus-upgradeを実行してPrometheusのバージョンアップをしてね」というメッセージが出ている。(アップデート中は標準出力がとんでもない速さで流れるので見逃しがちである。)
Webページが問題ないことを確認したら(11.11.8へのアップデートが完了したら)言われた通りPostgreSQLのバージョンアップを実施する。
$ sudo gitlab-ctl pg-upgrade
$ sudo gitlab-ctl restart
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-rake gitlab:check
$ sudo gitlab-ctl status
PostgreSQLのバージョンアップが完了したら、次はPrometheusのバージョンアップを実施する。
$ sudo gitlab-ctl prometheus-upgrade
$ sudo gitlab-ctl restart
$ sudo gitlab-ctl reconfigure
$ sudo gitlab-rake gitlab:check
$ sudo gitlab-ctl status
Gitlab CE 11.11.8 to CE 12.0.0
12.10.14には飛び級できない。そのため12.0.0を経由する。
アップデート方法は[Gitlab CE 10.3.0 to CE 10.8.7]と全く同じなので省略。
Gitlab CE 12.0.0 to CE 12.0.12
12.0.12を経由する。経由せずに12.10.14にアップデートするとredisとnginxが起動しない事態になった。(体験済)
アップデート方法は[Gitlab CE 10.3.0 to CE 10.8.7]と全く同じなので省略。
Gitlab CE 12.0.12 to CE 12.10.14
アップデート方法は[Gitlab CE 10.3.0 to CE 10.8.7]と全く同じなので省略。
Gitlab CE 12.10.14 to CE 13.0.14
アップデート方法は[Gitlab CE 10.3.0 to CE 10.8.7]と全く同じなので省略。
Gitlab CE 13.0.14 to CE 13.4.3
アップデート方法は[Gitlab CE 10.3.0 to CE 10.8.7]と全く同じなので省略。
ローカルマシンのGitlabからプロジェクトをエクスポートする
ProjectのSettings -> General -> Export Projectでエクスポート可能。
AWS上ののGitlabにプロジェクトをインポートする
New ProjectからImport Projectを選択し、[Gitlab export]を選択する。
これにて壊れかけのローカルサーバーからAWSのGitlabにプロジェクトを移動できた。
※ここで「413 Request Entity Too Large」が発生する場合がある。その場合はnginxの設定を確認するのは勿論だが、GitlabのAdminメニューにあるAdmin and limit settingからMax Import Sizeを確認してみると良い。
所感
つまずくのは恐らく3ポイント
- PostgreSQLとPrometheusの更新忘れ
- 経由すべきバージョンが抜けている
- Gitlabの管理者メニューで変更可能な、インポートファイルのサイズ制限
特に赤字の2つは苦労した。Gitlabはドキュメントが豊富だが、散らばっていて全て読まないと安全に更新できない。今回も単語で検索してようやく必要な操作を見つけたり手探りで実施した。
セキュリティのためとはいえ、ある程度長い互換性を持って欲しいと感じた。
(余談)バックアップからの復元
当然Gitlab自体のバックアップから復元をすれば早い話なのだが、10.3.0のバックアップをPC上の10.3.0に復元してみたところ、エラーになった。
時間がないので、原因究明はしなかったが、文字コードのエラーのようで、解決するには時間が必要そうだったので、この手法は諦めた。
*1:VirtualBoxの使い方については省略。
*2:restart後のreconfigureは不要かもしれないが、念のため実施していた。