6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【2019年版】GitLab CE/EEのゼロダウンタイムアップグレード

Last updated at Posted at 2019-12-22

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

この記事は、
GitLab Advent Calendar 2019 - Qiita
の1日目です

0. 前置き

2018年6月にこんなのを書きました。

GitLab CEで Zeroダウンタイムアップグレードを試す - Qiita
https://qiita.com/ynott/items/77e6f287a44bc1d6e797

2019年になって、いくつか更新されたので変更があった部分をご紹介します。
ゼロダウンタイムアップグレードについては上記URLをご確認ください。

1. 2019年になって変更された点

  1. Enterprise Editionにも対応した。
     会社でStarter Editionを利用するようになったのでEnterprise Editionにも対応するようにしました。
  2. Mattermostへ通知するようにした。
     会社でSlackからMattermostへ移行しました。その為、更新通知をMattermostにも飛ばすようにしました。
  3. aptでGitLabが自動的にアップデートをかからないようにした。
     Ubuntuのパッケージをデイリーで自動バージョンアップするようにしたのですが、GitLabも同時にバージョンアップすると不都合があるので、GitLabパッケージだけ sudo apt-mark hold gitlab-ce しておいて以下のbashスクリプトが実行されたときだけunholdしてアップグレードするようにしました。
  4. メジャーバージョンアップも自動でアップグレードするようにした。
     2018年のスクリプトではメジャーバージョンアップは避けるようにしていましたが、運用成績も悪くなかったのでメジャーバージョンアップ時にもゼロダウンタイムアップグレードするようにしました。

2. 2019年のゼロダウンタイムのアップグレードスクリプトでの運用実績

2019年10月に1回だけアップグレードスクリプトでアップグレードされても、バージョンアップされていないということがあり、同じバージョンのアップグレードが4回ほどかかりました。なにか引っかかっているのかとも思いましたが、最終的に4回目で更新されたので何が問題だったか不明です。

3. 2019年のアップグレードスクリプト

2019年のアップグレードスクリプトです。
大枠は変わっていません。

#!/bin/bash

EDITION=ce
MATTERMOST_WEBHOOK_URL='https://mattermost.example.jp/hooks/XXXXXXXXXXXXXXX'

# Check update
sudo apt update

export LANG=en_US.UTF-8

# Get versions(Ret Value:11.0.1-$EDITION.0 11.0.2-$EDITION.0)
VERSIONS_OLDNEW=$(apt-cache policy gitlab-$EDITION | grep -1 Installed | sed -r 's/(^  )//' | grep -v "gitlab-$EDITION:")
VERSION_OLD=$(echo $VERSIONS_OLDNEW | sed -r 's/Installed: (.*?) Candidate: .*/\1/g')
VERSION_NEW=$(echo $VERSIONS_OLDNEW | sed -r 's/Installed: .* Candidate: (.*?)/\1/g')


# check if you can upgrade
if [ "$VERSION_OLD" = "$VERSION_NEW" ];
then
   echo "CURRENT_VERSION:$VERSION_OLD is equal LATEST_VERSION:$VERSION_NEW"
   echo "GitLab $EDITION Version is not update, exit"
   exit 0;
fi

echo "Installed Version:$VERSION_OLD"
echo "Candidate Version:$VERSION_NEW"
echo "Update version available, update"

sudo apt-mark unhold gitlab-$EDITION
sudo apt-get install gitlab-$EDITION
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate
sudo gitlab-ctl usr2 puma
sudo gitlab-ctl restart sidekiq

msg="{\"text\": \"GitLab のバージョンを${VERSION_OLD}から${VERSION_NEW}にアップデートしました。\"}"
curl -i -s -o /dev/null -X POST -H 'Content-Type: application/json' -d "$msg" $MATTERMOST_WEBHOOK_URL

sudo apt-mark hold gitlab-$EDITION

4. 2020年

2020年もこのスクリプトでゼロダウンタイムアップグレード運用する予定です。


2020/01/23追記

GitLab 12.7がリリースされて、以下のページが更新されていた。

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

アップグレード
sudo gitlab-rake db:migrate
以下のアップグレード後のアップグレードスクリプトがこれまでは、

これまで
sudo gitlab-ctl hup unicorn
sudo gitlab-ctl hup sidekiq

だったのに

変更後
sudo gitlab-ctl hup unicorn
sudo gitlab-ctl usr2 puma
sudo gitlab-ctl restart sidekiq

に変更されていた。

gitlab-ctl hup sidekiqは、そもそもGracefulできないのにhupしてもしょうがないじゃん。というのと、
[gitlab-exporter]がPumaで動いているのでそれの再起動が追加されたというのものの2つ。
(GitLab 13で、UnicornがPuma化されるのとは関係ないらしい)


2020/05/25追記(と残念なお知らせ)

GitLab 13がリリースされました。
Webサーバーがunicornからpumaになったために、DBマイグレーション後のリスタートするものに
変更がありました。DBマイグレーション後に以下のようにしていましたが、

これまで
sudo gitlab-ctl hup unicorn
sudo gitlab-ctl usr2 puma
sudo gitlab-ctl restart sidekiq

unicornが不要になり削除して、以下のようになりました。
pumaは、以下の残念なお知らせにあるとおりhupになりました。

変更後
sudo gitlab-ctl hup puma
sudo gitlab-ctl restart sidekiq

残念なお知らせ

この記事では、GitLab omnibusインストールのゼロダウンタイムアップグレードを目指してきましたが、以下の**Caution**にもあるように、GitLabでのpumaはフェーズドリスタートができないため、ゼロダウンタイムはできなくなりました。。

image.png

Updating GitLab installed with the Omnibus GitLab package | GitLab
https://docs.gitlab.com/omnibus/update/README.html#single-node-deployment

とはいえ、便利に更新を続けられているのでこれからもこのスクリプトでバージョンアップしていこうと思います。

6
7
0

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
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?