はじめに
テストで使用しているGitLabのバージョンが古いのでアップグレードを実施してみる。
環境
Windows 10 Professional
WSL2 (Ubuntu22.04 LTS)
docker version 23.0.5
Docker Compose version v2.17.3
gitlab-ce:15.10.2-ce.0
gitlab-runner Version: 15.11.0
参考情報
以前の記事
で作成したGitLabの環境のため、下記の compose.yml
で動作している。
services:
gitlab:
build: ./gitlab
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG:
external_url 'http://gitlab.example.com/'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
ports:
- '80:80'
- '443:443'
- '22:22'
shm_size: '256m'
restart: unless-stopped
runner:
image: 'gitlab/gitlab-runner:latest'
restart: always
volumes:
- ./srv/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker/sock
ports:
- "8093:8093"
準備
下記を参考に、アップグレードを実施する。
バックアップの取得
GitLabをバックアップする
docker compose exec -t gitlab gitlab-backup create
こんな感じでできている↓
2023-06-11 04:21:47 UTC -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2023-06-11 04:21:51 UTC -- Dumping database ... done
2023-06-11 04:21:51 UTC -- Dumping repositories ...
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/Monitoring","level":"info","msg":"started create","relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2023-06-11T04:21:52.040Z"}
{"command":"create","error":"manager: repository empty: repository skipped","gl_project_path":"gitlab-instance-295fc39a/Monitoring","level":"warning","msg":"skipped create","relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.git","storage_name":"default","time":"2023-06-11T04:21:52.108Z"}
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/Monitoring.wiki","level":"info","msg":"started create","relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2023-06-11T04:21:52.201Z"}
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/Monitoring","level":"info","msg":"started create","relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.design.git","storage_name":"default","time":"2023-06-11T04:21:52.203Z"}
{"command":"create","error":"manager: repository empty: repository skipped","gl_project_path":"gitlab-instance-295fc39a/Monitoring","level":"warning","msg":"skipped create","relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.design.git","storage_name":"default","time":"2023-06-11T04:21:52.211Z"}
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/test-runner","level":"info","msg":"started create","relative_path":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git","storage_name":"default","time":"2023-06-11T04:21:52.211Z"}
{"command":"create","error":"manager: repository empty: repository skipped","gl_project_path":"gitlab-instance-295fc39a/Monitoring.wiki","level":"warning","msg":"skipped create","relative_path":"@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki.git","storage_name":"default","time":"2023-06-11T04:21:52.211Z"}
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/test-runner.wiki","level":"info","msg":"started create","relative_path":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.wiki.git","storage_name":"default","time":"2023-06-11T04:21:52.212Z"}
{"command":"create","error":"manager: repository empty: repository skipped","gl_project_path":"gitlab-instance-295fc39a/test-runner.wiki","level":"warning","msg":"skipped create","relative_path":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.wiki.git","storage_name":"default","time":"2023-06-11T04:21:52.218Z"}
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/test-runner","level":"info","msg":"started create","relative_path":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.design.git","storage_name":"default","time":"2023-06-11T04:21:52.218Z"}
{"command":"create","error":"manager: repository empty: repository skipped","gl_project_path":"gitlab-instance-295fc39a/test-runner","level":"warning","msg":"skipped create","relative_path":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.design.git","storage_name":"default","time":"2023-06-11T04:21:52.222Z"}
{"command":"create","gl_project_path":"gitlab-instance-295fc39a/test-runner","level":"info","msg":"completed create","relative_path":"@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git","storage_name":"default","time":"2023-06-11T04:21:52.307Z"}
2023-06-11 04:21:52 UTC -- Dumping repositories ... done
2023-06-11 04:21:52 UTC -- Dumping uploads ...
2023-06-11 04:21:52 UTC -- Dumping uploads ... done
2023-06-11 04:21:52 UTC -- Dumping builds ...
2023-06-11 04:21:52 UTC -- Dumping builds ... done
2023-06-11 04:21:52 UTC -- Dumping artifacts ...
2023-06-11 04:21:52 UTC -- Dumping artifacts ... done
2023-06-11 04:21:52 UTC -- Dumping pages ...
2023-06-11 04:21:52 UTC -- Dumping pages ... done
2023-06-11 04:21:52 UTC -- Dumping lfs objects ...
2023-06-11 04:21:52 UTC -- Dumping lfs objects ... done
2023-06-11 04:21:52 UTC -- Dumping terraform states ...
2023-06-11 04:21:52 UTC -- Dumping terraform states ... done
2023-06-11 04:21:52 UTC -- Dumping container registry images ... [DISABLED]
2023-06-11 04:21:52 UTC -- Dumping packages ...
2023-06-11 04:21:52 UTC -- Dumping packages ... done
2023-06-11 04:21:52 UTC -- Creating backup archive: 1686457307_2023_06_11_15.10.2_gitlab_backup.tar ...
2023-06-11 04:21:52 UTC -- Creating backup archive: 1686457307_2023_06_11_15.10.2_gitlab_backup.tar ... done
2023-06-11 04:21:52 UTC -- Uploading backup archive to remote storage ... [SKIPPED]
2023-06-11 04:21:52 UTC -- Deleting old backups ... [SKIPPED]
2023-06-11 04:21:52 UTC -- Deleting tar staging files ...
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/db
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/repositories
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/uploads.tar.gz
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/builds.tar.gz
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/artifacts.tar.gz
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/pages.tar.gz
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/lfs.tar.gz
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/terraform_state.tar.gz
2023-06-11 04:21:52 UTC -- Cleaning up /var/opt/gitlab/backups/packages.tar.gz
2023-06-11 04:21:52 UTC -- Deleting tar staging files ... done
2023-06-11 04:21:52 UTC -- Deleting backups/tmp ...
2023-06-11 04:21:52 UTC -- Deleting backups/tmp ... done
2023-06-11 04:21:52 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2023-06-11 04:21:52 UTC -- Backup 1686457307_2023_06_11_15.10.2 is done.
2023-06-11 04:21:52 +0000 -- Deleting backup and restore lock file
※リストアについては下記
データベースのバックアップを作成する
docker compose exec -t gitlab gitlab-backup create SKIP=artifacts,repositories,registry,uploads,builds,pages,lfs,packages,terraform_state
こんな感じでできた。
2023-06-11 04:30:47 UTC -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2023-06-11 04:30:51 UTC -- Dumping database ... done
2023-06-11 04:30:51 UTC -- Dumping repositories ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping uploads ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping builds ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping artifacts ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping pages ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping lfs objects ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping terraform states ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Dumping container registry images ... [DISABLED]
2023-06-11 04:30:51 UTC -- Dumping packages ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Creating backup archive: 1686457847_2023_06_11_15.10.2_gitlab_backup.tar ...
2023-06-11 04:30:51 UTC -- Creating backup archive: 1686457847_2023_06_11_15.10.2_gitlab_backup.tar ... done
2023-06-11 04:30:51 UTC -- Uploading backup archive to remote storage ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Deleting old backups ... [SKIPPED]
2023-06-11 04:30:51 UTC -- Deleting tar staging files ...
2023-06-11 04:30:51 UTC -- Cleaning up /var/opt/gitlab/backups/backup_information.yml
2023-06-11 04:30:51 UTC -- Cleaning up /var/opt/gitlab/backups/db
2023-06-11 04:30:51 UTC -- Deleting tar staging files ... done
2023-06-11 04:30:51 UTC -- Deleting backups/tmp ...
2023-06-11 04:30:51 UTC -- Deleting backups/tmp ... done
2023-06-11 04:30:51 UTC -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2023-06-11 04:30:51 UTC -- Backup 1686457847_2023_06_11_15.10.2 is done.
2023-06-11 04:30:51 +0000 -- Deleting backup and restore lock file
バックアップがあることを確認する
root@gitlab:/var/opt/gitlab/backups# ls -al
total 860
drwx------ 2 git root 4096 Jun 11 04:30 .
drwxr-xr-x 20 root root 4096 Jun 11 04:16 ..
-rw------- 1 git git 450560 Jun 11 04:21 1686457307_2023_06_11_15.10.2_gitlab_backup.tar
-rw------- 1 git git 419840 Jun 11 04:30 1686457847_2023_06_11_15.10.2_gitlab_backup.tar
docker cp
でホスト側にコピーをしたいので、 docker ps
でコンテナIDを取得する。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6141a64b13f0 gitlab/gitlab-runner:latest "/usr/bin/dumb-init …" 21 hours ago Up 59 minutes 0.0.0.0:8093->8093/tcp gitlab-docker-runner-1
ae3a14305e26 gitlab-docker-gitlab "/assets/wrapper" 21 hours ago Up 53 minutes (healthy) 0.0.0.0:22->22/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp gitlab-docker-gitlab-1
gitlab-docker-gitlab
が本体なので、ae3a14305e26
を控える。
docker cp ae3a14305e26:/var/opt/gitlab/backups/1686457307_2023_06_11_15.10.2_gitlab_backup.tar .
docker cp ae3a14305e26:/var/opt/gitlab/backups/1686457847_2023_06_11_15.10.2_gitlab_backup.tar .
アップグレード 15.10.x→15.11.x
アップグレードパスの確認
そのまま最新にアップデートということはできないことがあり、アップグレードパスを確認する必要がある。
今回は、15.10系から16.x系にアップグレードするので、 15.11.x
を経由する必要がある。
GitLab 15: 15.0.5> 15.1.6(複数の Web ノードを持つ GitLab インスタンスの場合) > 15.4.6>15.11.x GitLab 16:最新16.Y.Z
を参照した。
イメージタグの変更
-FROM gitlab/gitlab-ce:15.10.2-ce.0
+FROM gitlab/gitlab-ce:15.11.0-ce.0
アップグレードの実施
# イメージをプルする
docker compose pull
# コンテナの立ち上げ
docker compose up -d --build
※公式の手順では docker compose up -d
だが、 GitLab
は yml
ではなくDockerfile
に記載しているので、 --build
を付ける必要があった。
アップグレードの確認
アップグレード (15.11.x→16.x)
イメージタグの変更
-FROM gitlab/gitlab-ce:15.11.0-ce.0
+FROM gitlab/gitlab-ce:16.0.4-ce.0
アップグレードの実施
# イメージをプルする
docker compose pull
# コンテナの立ち上げ
docker compose up -d --build
アップグレードの確認
後始末
下記で、不要なリソースを削除する。
docker system prune
参考
- GitLab Docker images - Upgrade GitLab using Docker compose | GitLab
https://docs.gitlab.com/ee/install/docker.html#upgrade-gitlab-using-docker-compose - Back up and restore GitLab | GitLab
https://docs.gitlab.com/ee/raketasks/backup_restore.html - Upgrading GitLab | GitLab
https://docs.gitlab.com/ee/update/#upgrade-paths - docker cp | Docker-docs-ja
https://docs.docker.jp/engine/reference/commandline/cp.html - gitlab/gitlab-ce | Docker Hub
https://hub.docker.com/r/gitlab/gitlab-ce/tags - Dockerコンテナからホストへファイルをコピーする
https://qiita.com/RyotaIshii/items/25beeafaa836b4f4819c
おわりに
DockerでのGitLabのアップデートは初めてだったので手順の確認の意味も含めて実施した。
次回もGitLabを使用した何かをやりたい。