本文記錄Gitlab跨版本升級的具體操作過程。
按照官方的說法,gitlab允許小版本直接升級,大版本需要階段升級。
跨版本升級示例:11.0.x
-> 11.11.x
-> 12.0.x
-> 12.10.x
-> 13.0.x
。
官方推薦的升級路線文檔:https://docs.gitlab.com/ee/policy/maintenance.html#upgrade-recommendations
目的
實現gitlab版本:11.2.3到13.0.0版本的升級,我選擇的升級路線是:11.2.3 => 11.11.8 => 12.0.12 => 12.10.6
我當前創建gitlab容器的腳本如下:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 8443:443 --publish 8080:80 --publish 8022:22 \
--name gitlab \
--restart always \
--volume /home/ubuntu/Apps/gitlab/etc/gitlab:/etc/gitlab \
--volume /home/ubuntu/Apps/gitlab/var/log/gitlab/logs:/var/log/gitlab \
--volume /home/ubuntu/Apps/gitlab/var/opt/gitlab:/var/opt/gitlab \
gitlab/gitlab-ce:11.2.3-ce.0
我當前的gitlab容器已經將/etc/gitlab
,/var/log/gitlab
,/var/opt/gitlab
掛載到了宿主機上。
操作步驟
進入gitlab容器,停止gitlab服務,然后退出容器:
sudo docker exec -it gitlab /bin/bash
# 進入容器后執行
gitlab-ctl stop
退出容器后,刪除gitlab容器:
sudo docker rm gitlab -f
使用新版本的腳本運行gitlab容器,這里只修改gitlab的鏡像版本就可以了:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 8443:443 --publish 8080:80 --publish 8022:22 \
--name gitlab \
--restart always \
--volume /home/ubuntu/Apps/gitlab/etc/gitlab:/etc/gitlab \
--volume /home/ubuntu/Apps/gitlab/var/log/gitlab/logs:/var/log/gitlab \
--volume /home/ubuntu/Apps/gitlab/var/opt/gitlab:/var/opt/gitlab \
gitlab/gitlab-ce:11.2.3-ce.0
啟動容器后,查看容器運行狀態:
sudo docker ps | grep gitlab
等到容器狀態為Up xxx (healthy)
后,進入容器,停掉gitlab服務。。。
后面就是重復工作了,直到運行最新版本的gitlab容器。
Gitlab備份
在升級之前,最好先對gitlab數據做一個全量備份,避免升級失敗造成的不可逆影響。
具體的還原操作如下:
如果你和我一樣使用gitlab容器,首先進入容器,然后執行備份命令:
gitlab-ctl gitlab:backup:create
以上命令執行完后,會在容器的/var/opt/gitlab/backups
目錄下創建文件名類似1592276197_2020_06_16_11.2.3_gitlab_backup.tar
的備份文件。
Gitlab還原
如果你想利用gitlab的備份文件還原,那么你運行還原操作的gitlab必須和備份時使用的gitlab版本一致,否則可能會出現還原失敗的問題。
具體的還原操作如下:
如果你和我一樣使用gitlab容器,首先將gitlab的備份文件拷貝到/var/opt/gitlab/backups/
目錄下,然后進入gitlab容器,執行還原命令:
gitlab-ctl gitlab:backup:restore BACKUP=1592276197_2020_06_16_11.2.3
BACKUP
命令參數指定值為/var/opt/gitlab/backups/
目錄下的備份文件,但是無需攜帶_gitlab_backup.tar
后綴。