GitLab版本升级(Docker)

官方文档:https://docs.gitlab.com/ee/update/index.html
gitlab的docker镜像标签:https://hub.docker.com/r/gitlab/gitlab-ce/tags
参考文档:https://www.cnblogs.com/inxworld/p/11782545.html

概述

GitLab的版本升级流程可以简单概括为:

  1. 关闭旧版本的gitlab服务;
  2. 保留旧版本的配置文件(/etc/gitlab)、数据文件(/var/opt/gitlab)和日志文件(/var/log/gitlab);
  3. 安装新版本的gitlab并启动,即可自动升级。

但是不同版本之间可能存在着表结构等方面的差异,如果一个版本想兼容任意旧版本的直接升级那要程序员的头发可能要多掉好几把。GitLab采取的做法是指定一些固定版本连成一条升级路线,路线上的版本可按顺序直接升级下一版本,如果要升级的目标版本比较高,那需要一级一级地升。官方提供的升级路线如下:
8.11.Z -> 8.12.0 -> 8.17.7 -> 9.5.10 -> 10.8.7 -> 11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.15 -> latest 14.0.Z (14.0.12)-> latest 14.1.Z(14.1.8) -> latest 14.Y.Z

本文主要记录使用Docker安装的GitLab的升级过程。初始版本为12.10.6,需要的升级路线如下:
12.10.6 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.15 -> 14.0.12->14.1.8 -> 14.5.0

下载docker镜像

1
2
3
4
5
6
7
8
9
10
11
12
# 提前下载好所有的镜像,可以通过引言中的docker官方镜像标签页面查询
docker pull gitlab/gitlab-ce:12.10.6-ce.0
docker pull gitlab/gitlab-ce:12.10.14-ce.0
docker pull gitlab/gitlab-ce:13.0.14-ce.0
docker pull gitlab/gitlab-ce:13.1.11-ce.0
docker pull gitlab/gitlab-ce:13.8.8-ce.0
docker pull gitlab/gitlab-ce:13.12.15-ce.0
docker pull gitlab/gitlab-ce:14.0.12-ce.0
docker pull gitlab/gitlab-ce:14.1.8-ce.0
# 不指定标签,默认下载最新版
docker pull gitlab/gitlab-ce

启动实例

启动时把配置文件(/etc/gitlab)、数据文件(/var/opt/gitlab)和日志文件(/var/log/gitlab)映射到宿主的环境中,这样删除实例后就能保留目标数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 先启动第一个版本的实例
docker run -d \
-p 443:443 \
-p 8086:80 \
-p 222:22 \
--name gitlab \
--restart always \
-v /home/docker/config:/etc/gitlab \
-v /home/docker/logs:/var/log/gitlab \
-v /home/docker/data:/var/opt/gitlab \
gitlab/gitlab-ce:12.10.6-ce.0

# 观察镜像运行情况
docker ps |grep gitlab
# 当status为healthy表示服务启动成功,可以通过服务器的8086端口访问gitlab服务了
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a275b6cc0b6b gitlab/gitlab-ce:13.12.15-ce.0 "/assets/wrapper" 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:222->22/tcp, :::222->22/tcp, 0.0.0.0:8086->80/tcp, :::8086->80/tcp gitlab

恢复数据

本次升级涉及到数据的迁移,原先是采用rpm安装的gitlab,想转到docker中需要迁移,迁移过程如下:
注意:恢复数据只能使用相同的版本恢复,先恢复,后升级。

  1. 备份

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 在旧服务中运行备份命令
    # 备份用户数据(包括用户信息、项目信息、代码),备份文件默认存放到/var/opt/gitlab/backups/目录
    # 可通过/etc/gitlab/gitlab.rb文件的gitlab_rails['backup_path']配置进行修改
    sudo gitlab-rake gitlab:backup:create

    ## 备份完成后会出现下面的告警信息:
    Creating backup archive: 1616405573_2021_03_22_12.10.6_gitlab_backup.tar ... done
    Uploading backup archive to remote storage ... skipped
    Deleting tmp directories ... done
    done
    done
    done
    done
    done
    done
    done
    Deleting old backups ... skipping
    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.
    Backup task is done.

    # 提示还需要备份配置信息gitlab.rb 和 密钥信息gitlab-secrets.json,恢复数据时需要使用
    sudo cp /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups/
  2. 恢复

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 复制备份好的文件和配置、密钥
    sudo cp /var/opt/gitlab/backups/gitlab.rb / /home/docker/config
    sudo cp /var/opt/gitlab/backups/gitlab-secrets.json / /home/docker/config
    sudo cp /var/opt/gitlab/backups/1616405573_2021_03_22_12.10.6_gitlab_backup.tar / /home/docker/data

    # 进入gitlab实例
    docker exec -i -t gitlab /bin/bash
    # 开始恢复数据,输入版本号即可,不需要后面的_gitlab_backup.tar,如下:
    gitlab-rake gitlab:backup:restore BACKUP=1623145488_2021_06_08_12.10.6

    # 重载gitlab配置
    gitlab-ctl reconfigure

升级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 关闭当前版本的gitlab实例,可能需要十来秒
docker stop gitlab
# 删除当前版本的实例
docker rm gitlab

# 启动下一个版本的实例(注意最后的版本号)
docker run -d \
-p 443:443 \
-p 8086:80 \
-p 222:22 \
--name gitlab \
--restart always \
-v /home/docker/config:/etc/gitlab \
-v /home/docker/logs:/var/log/gitlab \
-v /home/docker/data:/var/opt/gitlab \
gitlab/gitlab-ce:12.10.14-ce.0

# 观察镜像运行情况,当status为healthy表示服务启动成功,用浏览器访问服务验证是否正常
docker ps |grep gitlab

# 服务运行正常说明升级成功,可重复该过程一直到升级为目标版本为止

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!