GitLab 13.12.15からGitLab 14.4.2までアップグレード

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

# 0. はじめに

なぜ、GitLabを14.4.2までアップグレードしたかったか？
簡単に言うと`GitLab Kubernetes Agent available in GitLab Free`を使いたかったから。

## 0-1. GitLab Kubernetes Agentてなに？

簡単に言うとKubernetesクラスターとGitLabを連携させる機能です。

GitLab Kubernetes Agent | GitLab 
https://docs.gitlab.com/ee/user/clusters/agent/

これまでもKubernetesクラスターとGitLabを連携させる機能はありました。
しかし、これまではGitLabからKubernetesへ接続していました。

`GitLab(Kubernetes認証情報) ---(Push)--> Kubernetes`

しかし、これには問題があります。
GitLab側にKubernetesの認証情報をがっつり保存しないといけないのです。
それの何が問題かというと、Kubernetesの認証情報というのはKubernetesのすべてをコントロールできる設定なので、その認証情報が万が一漏洩したときの影響が甚大すぎるのです。
もし、GitLabが複数のKubernetesへ連携していた場合にGitLabサーバーが1台乗っ取られるとその配下のすべてのKubernetesがコントロールできるということになり、目も当てられない状況になる可能性がありました。

また、GitLabからKubernetesへ接続する必要があるので、GitLab.comからKubernetesクラスターへ接続しようとしても、KubernetesクラスターがGitLab.comからIPリーチャブルな所にある必要があり、Kubernetesクラスターがインターネット上からアクセスできる場所になければならないという2重にやばい状況だったわけです。

それを解消するのが、`GitLab Kubernetes Agent`です。
これは、GitLabからKubernetesクラスターへ接続する方向を取りやめ、KubernetesクラスターからGitLabへ接続して連携するという方向に変わりました。

`Kubernetes(GitLab Kubernetes Agent) --(Pull)--> GitLab`

これなら、認証情報をGitLab側に設定する必要も無く、KubernetesがGitLabへPullポーリングをかけるという方法なので、Kubernetesクラスターをインターネット上にさらす必要もありません。

## 0-2. GitLab Kubernetes Agentが無料になります！

GitLab Kubernetes Agentは導入当初(13.4)は、Premium Editionでしか利用できませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/bc065688-75d4-1764-324c-2f2698a7a73f.png)

しかし、14.5から無償版でも利用できるようになります！！ :tada: 

注：`Agent’s GitOps workflow`機能と`GitOps deployments`機能と`Kubernetes Network Security Alerts`機能は有償版のみの機能です。

## 0-3. OSのバージョンアップが必要

GitLabをバージョン14.5にバージョンアップしたい！(執筆時点では未リリース)となったのですが、GitLabがインストールされているOSがUbuntu 16.04 LTSでした。そのため、GitLabのバージョンが`13.12.15`で止まっていました(16.04がサポート終了なので提供されるGitLabパッケージも提供が終了しています)。

## 0-4. 以下のような工程が必要に :cry:(訂正あり) 

1. Ubuntu 16.04 LTSから18.04 LTSにアップグレード
1. GitLab CE 13.12.15からGitLab CE 14.0.12にアップグレード
1. GitLab CE 14.0.12からGitLab CE 14.1.8にアップグレード
1. GitLab CE 14.1.8から~~GitLab CE 14.2.6にアップグレード~~
1. ~~GitLab CE 14.2.6からGitLab CE 14.3.4にアップグレード~~
1. ~~GitLab CE 14.3.4から~~GitLab CE 14.4.2にアップグレード

はじめは、`13.12.15`から`14.4.2`に飛ばしてアップグレードできると思ったのですが、そうはいきませんでした。13系から14系にメジャーアップグレードが入っています。まず、これを乗り越える必要がありました。

さらに、14系から`Batched background migrations`というのが導入され、`14.0.12`から~~`14.3.4`~~`14.1.8`まで~~は、一つずつ~~アップグレードする必要があります(😱)。

`Note`:
それ以降 14.1.Yから最新までは`Batched background migrations`で一気にアップグレード可能です。(@wadakatu さん、情報ありがとうございました)

# 1. OSアップグレード

OSのアップグレードは以下のようにするだけです。

```
sudo do-release-upgrade
```
途中設定ファイルをパッケージの新しいものにするか、既存のものにするかという対話的操作が必要になりますので、ターミナルは開いたままにしておきましょう。


# 2. GitLab CE 13.12.15からGitLab CE 14.0.12にアップグレード

最新版の14.4.2が出ているので、sudo apt upgradeでは以下のようなエラーになります。

```
The following packages will be upgraded: 
  gitlab-ce 
1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 
Need to get 0 B/957 MB of archives. 
After this operation, 190 MB of additional disk space will be used. 
Reading changelogs... Done 
(Reading database ... 183467 files and directories currently installed.) 
Preparing to unpack .../gitlab-ce_14.4.2-ce.0_amd64.deb ... 
gitlab preinstall: It seems you are upgrading from major version 13 to major version 14. 
gitlab preinstall: It is required to upgrade to the latest 14.0.x version first before proceeding. 
gitlab preinstall: Please follow the upgrade documentation at https://docs.gitlab.com/ee/update/index.html#upgrade- 
dpkg: error processing archive /var/cache/apt/archives/gitlab-ce_14.4.2-ce.0_amd64.deb (--unpack): 
 new gitlab-ce package pre-installation script subprocess returned error exit status 1 
Errors were encountered while processing: 
 /var/cache/apt/archives/gitlab-ce_14.4.2-ce.0_amd64.deb 
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

「メジャーアップグレードになるので、14.0.xに先にアップデートしてね」と言われます。
なので、以下のようにアップグレードします。

```
sudo apt upgrade gitlab-ce=14.0.12-ce.0
```

アップグレードが終わったら以下のようにreconfigureしてdb:migrateしましょう。

```
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate
sudo gitlab-ctl hup puma
sudo gitlab-ctl restart sidekiq
```

GitLabが起動したら`BackGround Migrations`を確認します。
「管理」＞「監視」＞「BackGround Migrations」＞タブの「キュー済」を見ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/be78ac87-6c97-c456-c8d0-16da2e5b399e.png)
まだジョブは完了していないようです。「完了」タブを見ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/998075b8-ec4c-68f6-02bb-28d0af0467a6.png)

完了まで待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/6284b447-398b-cb7a-91ec-585882dd8dc6.png)
完了したので次に進みます。

# 3. GitLab CE 14.0.12からGitLab CE 14.1.8にアップグレード

あとは、これを繰り返します。

```
sudo apt upgrade -y gitlab-ce=14.1.8-ce.0
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate
sudo gitlab-ctl hup puma
sudo gitlab-ctl restart sidekiq
```
バックグラウンドのマイグレーションジョブはありませんでした。

# 4. GitLab CE 14.1.8からGitLab CE 14.2.6にアップグレード(訂正追記:GitLab CE 14.4.2までアップグレード可能です)

以下のコマンドでアップグレードします。

```
sudo apt upgrade -y gitlab-ce=14.2.6-ce.0 
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate 
sudo gitlab-ctl hup puma 
sudo gitlab-ctl restart sidekiq
```
マイグレーション完了後のものだけ示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/84e786dd-f984-564d-3e71-48310ff08896.png)

# 5. GitLab CE 14.2.6からGitLab CE 14.3.4にアップグレード(訂正追記:GitLab CE 14.4.2までアップグレード可能です)

以下のコマンドでアップグレードします。

```
sudo apt upgrade -y gitlab-ce=14.3.4-ce.0 
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate 
sudo gitlab-ctl hup puma 
sudo gitlab-ctl restart sidekiq
```
バックグラウンドのマイグレーションジョブはありませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/d96ae464-3e92-8128-f6ad-047420b2f9b3.png)
# 6. GitLab CE 14.3.4からGitLab CE 14.4.2にアップグレード(訂正追記:GitLab CE 14.1.8からアップグレード可能です)

以下のコマンドでアップグレードします。

```
sudo apt upgrade -y gitlab-ce=14.4.2-ce.0 
SKIP_POST_DEPLOYMENT_MIGRATIONS=true sudo gitlab-ctl reconfigure
sudo gitlab-rake db:migrate 
sudo gitlab-ctl hup puma 
sudo gitlab-ctl restart sidekiq
```

マイグレーションバックグラウンドジョブなし

# 7.　まとめ

アップグレードが完了しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15176/7bd48205-de06-19bc-0374-d7f496a1bfe1.png)

次は14.5ですね。