Help us understand the problem. What is going on with this article?

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

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

この記事は、
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

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

stylez
WEB・業務システム、インフラ構築・運用監視まで、幅広い開発実績と経験豊富なエンジニアによる自社開発体制で、スピーディかつ高クオリティのシステム開発を手掛けています。AWSをはじめ各種クラウドやベンダーパートナーとして総合的なITサービスや、独自移行ツールを使ったマイグレーション、サーバーレスなシステム構築、コンテナを利用したDevOpsコンサルティングなどを提供しています。
https://www.stylez.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした