LoginSignup
16
11

More than 5 years have passed since last update.

GitLab CEで Zeroダウンタイムアップグレードを試す

Last updated at Posted at 2018-06-11

GitLab CE で Zeroダウンタイムアップグレードを試してみます。

1. よくある話

最近のオープンソースソフトウェアは非常に更新が激しい(頻繁リリースを旨とするから)のです。

GitLabもご多分に漏れず、結構な頻度でアップデートがリリースされます。
まあ、こんな風になります。
image.png

そうなると、よくある話は「また、メンテナンスしてるの!?(怒) なんでそんなにいつもアップデートしてるねん!(怒怒)」と開発者さんに言われることです(弊社にはいないようですが)。

そういうことを言われてしまうと、ついついアップグレードがおっくうになってしまって放置状態。
そうこうしているうちにアップデートできなくなってしまい...。

という事がよくあります。(弊社社内管理のサーバーでもいろいろ。。)

それを避けるには一所懸命オープンソースのバージョンと合わせてアップデートしていくしかありません。

2. GitLabはダウンタイムゼロでアップグレードできるぜ

DBが1カ所であるとなかなかアップデートできないのですが(テーブルのマイグレーションとかあるとね)、
GitLabは、Version 9.1.0からZeroダウンタイムアップグレードができるようになっています。

Updating GitLab installed with the Omnibus GitLab package | GitLab
https://docs.gitlab.com/omnibus/update/README.html#zero-downtime-updates

「これで、開発者からの文句を避けつつ、アップグレードできるぜ!」と思ったのと、
ググってみてもやっている記事を見つけられなかったので、チャレンジしてみます。

3. 前提条件

その前に、適用作業が以下の3種類で違うようです。

Deployment type Description
Single GitLab CE/EE on a single node
Multi-node / HA GitLab CE/EE on multiple nodes
Geo GitLab EE with Geo enabled

また、Zeroダウンタイムアップグレードできる条件と注意事項というのがあります。
Updating GitLab | GitLab
https://docs.gitlab.com/ee/update/README.html#upgrading-without-downtime

  1. マイナーアップデート1つ分しかアップデートできないこと
  2. パッケージアップデート後の手動作業が必要なこと
  3. PostgreSQLを使っていること(MySQLはNG)
    ※注1:Zeroダウンタイムアップグレードでは、マイグレーションがバックグラウンドタスクで実行される(特に月次のリリース)のでその間に次のアップデートを実行しないようにする事!
    ※注2:アップデートの手動作業には通常のupdateで実行されるバックアップが含まれていないようでした(やってみた結果です)。

今回は、Singleノードです。
image.png

10.8.3 がインストールされているサーバーですが、10.8.4 がリリースされています。
10.8.3 ---> 10.8.4 にアップデートしてみようと思います。

OSは、Ubuntu 16.04 LTS
omnibusインストールされているGitLabです。

GitLab 10.8.3 (564c342)
GitLab Shell 7.1.2
GitLab Workhorse v4.2.1
GitLab API v4
Ruby 2.3.7p456
Rails 4.2.10
postgresql 9.6.8
Gitaly Servers

4. やってみる

シングルノードの手順は5つです。

4-1. /etc/gitlab/skip-auto-reconfigure ファイルの作成

まず、skip-auto-reconfigure ファイルを作ります。
これによって、sudo apt upgradeしたときに reconfigureされないようです。

bash
sudo touch /etc/gitlab/skip-auto-reconfigure

image.png
まあ、ファイルができるだけですね。問題ないでしょう。

どうも、Version 10.6からは
/etc/gitlab/skip-auto-migrations

じゃなくて、
/etc/gitlab/skip-auto-reconfigure
になっているみたいですね(10.6以前の場合は、skip-auto-migrations を使いましょう)。

4-2. GitLabのパッケージをアップデートします。

bash
sudo apt-get update && sudo apt-get install gitlab-ce

image.png

パッケージはアップデートされましたが、reconfigureは実行されませんでした。

GitLabの絵文字の上の Found /etc/gitlab/skip-auto-reconfigure, exiting... で終了しています。

4-3. reconfigureを手動実行します

bash
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure

image.png

reconfigureされたようです。

4-4. DBをマイグレーションします。

bash
sudo gitlab-rake db:migrate

image.png

サクッとDBマイグレーションも終了しました。
何のメッセージも出なかったということは、DBの更新はなかったんですね。

4-5. アプリ再起動

bash
sudo gitlab-ctl hup unicorn
sudo gitlab-ctl hup sidekiq

unicorn と sidekiq をhupします

image.png

こちらも何の問題もなく終了しました。

4-6. 結果確認

Adminページをリロードします。

image.png

アップデートされました!

なかなか良いのではないでしょうか。

5. 結論

OSSは特にバージョンアップして最新版についていくのは非常に重要です。

これで、いつでも気兼ねなくバージョンアップすることできることが確認できました。
私のようなアップデート坊には特に嬉しい機能ではないでしょうか。

6. ちなみに

4-1で作ったファイルはアップデート後にどうなるかというと、

image.png

残ります。
次回実行時も上記のアップデート手順が必要になります。

7. アップデートシェルスクリプト

cron用に適当に書いたbashスクリプトをgistにアップしておきました。

メジャーアップデート(数字の1桁目、2桁目が変わる場合)はアップデートしません。
アップデートがない場合は、すぐ終了します。

16
11
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
11