【Omnibus GitLab】アップグレード手順（Ver.11 ~ Ver.12.10.14まで）

GitLabサーバーのアップグレードしてますか？
古いバージョンのまま放置されてる方も多いのではないでしょうか？

[GIGAZINE：1Tbpsを超えるDDoS攻撃にGitLabサーバーが悪用されていると判明](https://gigazine.net/news/20211105-gitlab-servers-exploited-ddos-over-1-tbps/)

脆弱性があるGitLabサーバーを悪用されるケースもあるらしいので、
なるべく早めに**最新バージョン**にしましょう。

3部構成で、GitLabのアップグレード手順をまとめます。

- 1.【Omnibus GitLab】アップグレード手順（Ver.11 ~ Ver.12.10.14まで）
- 2.[【Omnibus GitLab】アップグレード手順（Ver.13 ~ Ver.14.6.2まで）](https://qiita.com/wadakatu/items/9c9b08874fb1372df382)
- 3.[【Omnibus GitLab】サーバーアップグレードの注意点・エラー対処法](https://qiita.com/wadakatu/items/b7b5ef486a67d6ec2455)

### 今回は、**Ver.11 〜 Ver.12.10.14**のアップグレード手順です。


## 前提条件

- GitLabを**omnibusパッケージで構築している**こと
- GitLabの現行バージョンが**11以上、13未満**であること

## まず初めに

アップグレードを始める前に、２つのことを確認しましょう。

### 1. 現行バージョンの確認

現在のGitLabバージョンを確認しましょう。
確認方法には２つあります。

#### a. Web上から確認

GitLabのサイトから確認するには、以下のURLにアクセスしてください。

```
https://[GitLabが動作しているホスト]/help
```

下記の表示が出ます。

##### [**update asap**]

セキュリティ的に脆弱なバージョンのGitLabを使用している証拠です。
とにかく早くアップグレードしましょう。

![asap.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838340/8b6b67a2-2a00-9701-6c43-65d7239aef5a.png)

---

##### [**update available**]

最新のGitLabバージョンがリリースされています。
頃合いを見計らってアップグレードしましょう。

![available.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838340/b6771af9-07dc-0061-fc7a-f190dfede905.png)

---

##### [**up-to-date**]

最新のGitLabを使用している証拠です。
何も心配は入りません。

![スクリーンショット 2021-12-08 20.11.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838340/dd382468-2425-8012-7563-a356d98a11bf.png)



#### b. CLIから確認

CLIを使用して、バージョンを確認することもできます。
Terminalなどで、下記コマンドを入力してください。

```
sudo gitlab-rake gitlab:env:info
```

GitLabのサーバー情報は、真ん中付近に記載されています。

```terminal
GitLab information
Version:	11.11.0
Revision:	abcdefg
Directory:	/opt/gitlab/embedded/service/gitlab-rails
DB Adapter:	PostgreSQL
DB Version:	9.6.11
```

### 2. アップグレードガイド確認

:::note warn
必ずアップグレード前に[GitLab公式アップグレードガイド](https://docs.gitlab.com/ee/update/)を確認してください。
とあるバージョンのみ適用される**特殊な手順**が含まれている場合があります。
:::

#### アップグレードの順番について

GitLabサーバーは、先ほど確認した現行バージョンに応じて
**適切な段階を踏んでアップグレード**する必要があります。
つまり、**古いバージョンからいきなり最新バージョンに更新は無理です。(Ver.11.0 -> Ver.12.10など)**

詳しくは[GitLab公式サイト](https://docs.gitlab.com/ee/update/index.html#upgrade-paths)をチェックしてください。

現在のGitLabバージョンが11.11.0と仮定した場合
Ver.12.10.14へのアップグレードは以下のような流れになります。
**1段階アップグレードを進めるたびに、この手順を１周するイメージです。**

```terminal
11.11.0 -> 11.11.8 -> 12.0.12 -> 12.1.17-> 12.10.14
```

**アップグレードの流れを確認できたら、実際にアップグレードを進めていきましょう。**


## 1. バックアップ作成

**バックアップはとにかく大事です。**
**困ったことになる前にバックアップしましょう。**

GitLabのバックアップには２種類あります。

### a. 各リポジトリのバックアップ

まずは、GitLabで管理している各リポジトリのバックアップを行いましょう
下記コマンドを入力するだけで、バックアップ作成を行なってくれます。

GitLabアップグレード時にもバックアップファイルを作成してくれますが、念の為手動でも作成しておきましょう。
**（バックアップの作りすぎで怒られることは滅多にないので、強気にいきましょう。）**

```
sudo gitlab-rake gitlab:backup:create
```

`/var/opt/gitlab/backups`のディレクトリ内を確認してください。
（バックアップディレクトリは`gitlab.rb`の設定から変更可能です。）

当日のバックアップファイルができていればバックアップ完了です。
`（例：12334567890_2021_12-22_11.0.8_gitlab_backup.tar）`

次は、設定ファイルのバックアップに移りましょう。

### b. 設定ファイルのバックアップ

さっきのコマンドだけでは、リポジトリの情報しかバックアップしてくれません。
しかし、`/etc/gitlab`ディレクトリ内の設定ファイル群もバックアップしておいたほうが良いです。

下記コマンドで、手動バックアップを行いましょう。

```
sudo cp -ap /etc/gitlab <任意のディレクトリ>
```

## 2. バックグラウンドマイグレーション確認

GitLabのバージョンを上げると、バックグラウンドでマイグレーションが走ります。
まだ、前のバージョンのマイグレーションが残っているのに、次のバージョンのアップグレードを
行なってしまうと、**不具合**に繋がります。
**毎回、すべてマイグレーションが終了していることを確認しましょう。**

### 1. Railsコンソールを開く

```
sudo gitlab-rails console
```

### 2. マイグレーション確認

Railsコンソールに、下記のコマンド２つを個別に入力してください。
マイグレーションの残チェックを行います。

```
puts Sidekiq::Queue.new("background_migration").size 
```

```
Sidekiq::ScheduledSet.new.select{ |r| r.klass == 'BackgroundMigrationWorker'}.size
```

どちらも、**「０」と表示されればマイグレーションが終わっている証拠です。**
次の行程に進みましょう。

## 3. パッケージリポジトリ追加

既にパッケージリポジトリを追加済みの方は**この処理を実行する必要はありません。**
次の処理に進みましょう。
[こちら](https://gitlab-docs.creationline.com/omnibus/manual_install.html)を参考にして、GitLab構築した方はおそらく**必要ないかと。。**
（わからない方は、一旦スキップして次の処理に進んでください。）

ご自身のOSに応じて適切なコマンドを入力して、GitLab Community Edition のパッケージをダウンロードしてください。
※Enterprise Editionをお使いの場合は、`gitlab-ce`の部分を`gitlab-ee`に変更してください。

```terminal:Ubuntu/Debian
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
```

```terminal:CentOS
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
```

## 4. 指定バージョンをインストール（アップグレード）

[アップグレードの流れ](https://docs.gitlab.com/ee/update/index.html#upgrade-paths)をしっかり確認して、正しいバージョンをインストールしましょう。

```terminal:Ubuntu/Debian
sudo apt-get install gitlab-ce-1*.**.**

#バージョン11.11.8をインストールしたい場合
sudo apt-get install gitlab-ce-11.11.8
```

```terminal:CentOS
sudo yum install gitlab-ce-1*.**.**

#バージョン11.11.8をインストールしたい場合
sudo yum install gitlab-ce-11.11.8
```

上記コマンドを入力後、下記のような表示がコンソールの最後に出ればOKです。
次の項目に進みましょう。

```terminal
Running handlers:
Running handlers complete
Chef Client finished, 16/464 resources updated in 31 seconds
gitlab Reconfigured!
Restarting previously running GitLab services
ok: run: gitaly: (pid 477) 10532s
ok: run: gitlab-workhorse: (pid 261) 1s
ok: run: logrotate: (pid 26) 0s
ok: run: postgresql: (pid 47) 10532s
ok: run: redis: (pid 41) 10532s
ok: run: sidekiq: (pid 240) 0s
ok: run: unicorn: (pid 254) 1s

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/
  

Upgrade complete! If your GitLab server is misbehaving try running
  sudo gitlab-ctl restart
before anything else.
If you need to roll back to the previous version you can use the database
backup made during the upgrade (scroll up for the filename).

  検証中                  : gitlab-ce-11.11.8-ce.0.el7.x86_64                                                                                                                                         1/2 
  検証中                  : gitlab-ce-11.11.0-ce.0.el6.x86_64                                                                                                                                         2/2 

更新:
  gitlab-ce.x86_64 0:11.11.8-ce.0.el7                                                                                                                                                                     

完了しました!
```

## 5. 動作確認

`https://[GitLabが動作しているホスト]/help`にアクセスし、ページに表示される
GitLabのバージョンが上がっているか確認してください。
（アップグレード完了後大体１、２分で画面が確認できます。）

そして、各ページに遷移してみて、特にエラーなど出ないか動作確認してください。
何もなければ次に進みましょう。

## 6. バックアップファイル削除

1の行程で作成したバックアップファイルを削除しましょう。
別に残しておいても良いですが、GitLabのバックアップファイルのレストアは少し特殊でバックアップ作成時と異なるバージョンのGitLabにはリストアできません。
つまり、GitLab Ver.11.0.0で取得したバックアップは、Ver.11.0.1ではレストアできません。

## 7. 1に戻る

## 最後に

以上が、**GitLabのVer.11 ~ Ver.12.10.14までのアップグレード手順**です。
GitLabは公式ドキュメントがとても充実しているので、迷った際にはそちらを読んでみてください。
特に[リリースノート](https://about.gitlab.com/releases/categories/releases/)には、重大な変更点などが
書き記されているので、随時確認するようにしてください。

もし、不明点・質問などあればコメント欄にて教えてください。
誰かの役に立ちますように。。

## 参考資料

[Omnibus GitLabインストール手順](https://gitlab-docs.creationline.com/omnibus/manual_install.html)
[GitLab 13.0にアップデートする手順と注意点](https://www.gitlab.jp/blog/2020/07/07/how-to-upgrade-gitlab-13/)
[Upgrading GitLab](https://docs.gitlab.com/ee/update/index.html#upgrade-paths)
[Upgrade GitLab by using the GitLab package](https://docs.gitlab.com/omnibus/update/)
[GitLab Release Note](https://about.gitlab.com/releases/categories/releases/)
[GitLab Tag List](https://gitlab.com/gitlab-org/gitlab-runner/-/tags)
[PostgreSQL Requirement](https://docs.gitlab.com/ee/install/requirements.html#database)
[Back up and restore GitLab](https://docs.gitlab.com/ee/raketasks/backup_restore.html)
[GitLab Package List](https://packages.gitlab.com/gitlab/gitlab-ce)