Gitlab升级文档demo
3
2022-11-29
一、准备工作
-
出错排查
# 查看所有的logs; 按 Ctrl-C 退出 $ gitlab-ctl tail # 拉取/var/log/gitlab下子目录的日志(查看拉取或者推送的错误日志) $ gitlab-ctl tail gitlab-rails # 拉取某个指定的日志文件(查看gitlab运行组件报错信息) $ gitlab-ctl tail nginx/gitlab_error.log
-
确认当前版本及安装方式
$ cat /opt/gitlab/embedded/service/gitlab-rails/VERSION 14.7.3 cat /var/opt/gitlab/postgresql/data/PG_VERSION 12 $ rpm -qa gitlab-ce gitlab-ce-14.7.3-ce.0.el7.x86_64
-
确认版本
$ cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) $ uname -r 3.10.0-1160.59.1.el7.x86_64
-
GitLab状态
$ gitlab-ctl status
-
升级流程

二、备份相关测试
-
查看备份版本
$ cat /etc/gitlab/gitlab.rb | grep backup_path gitlab_rails['manage_backup_path'] = true gitlab_rails['backup_path'] = "/data/gitlab/backups"
-
查看过期时间(秒)
$ cat /etc/gitlab/gitlab.rb | grep backup_keep_time gitlab_rails['backup_keep_time'] = 604800
-
执行备份命令
$ gitlab-backup create
从备份中排除特定目录
db
(数据库)uploads
(附件)builds
(CI 作业输出日志)artifacts
(CI 作业工件)lfs
(LFS 对象)registry
(容器注册表映像)pages
(页面内容)repositories
(Git 存储库数据)packages
(包)
$ gitlab-backup create SKIP=db,uploads
-
配置文件备份
/etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab.rb
$ cp /etc/gitlab/gitlab.rb /root/gitlab/gitlab.rb $ cp /etc/gitlab/gitlab-secrets.json /root/gitlab/gitlab-secrets.json
三、正式升级步骤
升级包下载地址:https://packages.gitlab.com/gitlab/gitlab-ce/升级路径:14.9.5 => 14.10.5 => 15.0.5 => 15.4.4 => 15.5.3
循环执行以下步骤
升级每个版本时,需要启动GitLab等待数据迁移任务完成,然后再备份,再次进行下一个版本的升级。升级前检查: $ rpm -qa gitlab-ce gitlab-ce-14.7.3-ce.0.el7.x86_64 #查看服务状态 $ gitlab-ctl status $ gitlab-rake gitlab:check SANITIZE=true --trace $ gitlab-rake gitlab:check $ gitlab-rake gitlab:check SANITIZE=true #手动备份敏感文件 $ cp /etc/gitlab/gitlab.rb /var/opt/gitlab/backups $ cp /etc/gitlab/gitlab-secrets.json /var/opt/gitlab/backups #停止服务 $ gitlab-ctl reconfigure $ gitlab-ctl stop $ gitlab-ctl status #安装新版本 $ rpm -Uvh gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm 确认配置文件内容存在,如果不存在替换之前的备份文件: $ cd /etc/gitlab/ $ egrep -v "^$|^#" gitlab.rb #刷新配置 $ gitlab-ctl reconfigure #安装后可能会有部分服务启动失败,执行如下命令: $ gitlab-ctl restart #查看数据是否迁移完成:web界面为Menu > Admin > Monitoring > Background Migrations. $ gitlab-rails runner -e production 'puts Gitlab::BackgroundMigration.remaining' #确认当前版本及服务状态: $ gitlab-ctl status $ rpm -qa gitlab-ce $ cat /opt/gitlab/embedded/service/gitlab-rails/VERSION #访问页面确认版本 http://gitlab.luna.org/help
14.7.3 => 14.9.5
$ wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-14.9.5-ce.0.el7.x86_64.rpm/download.rpm $ rpm -Uvh gitlab-ce-14.9.5-ce.0.el7.x86_64.rpm
风险点:
- 升级到 GitLab 14.9 所做的数据库更改可能需要数小时或数天才能在更大的 GitLab 实例上完成。这些批处理的后台迁移更新整个数据库表,以确保
namespaces
表中的每条记录都有对应的记录projects
。 - 更新到 14.9.0 或更新的 14.9 补丁版本后, 必须先完成批量后台迁移, 然后再更新到更新的版本。
- 如果迁移未完成并且您尝试更新到更高版本,您会看到如下错误:
- Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active':
- 或者
- Error executing action
run
on resource 'bash[migrate gitlab-rails database]' ================ Mixlib::ShellOut::ShellCommandFailed ------------------------------------ Command execution failed. STDOUT/STDERR suppressed for sensitive resource - GitLab 14.9.0 包括一个 后台迁移ResetDuplicateCiRunnersTokenValuesOnProjects ,它可能会永久停留在挂起状态。
- 要清理这个卡住的工作,请在GitLab Rails 控制台中运行以下命令:
- Gitlab::Database::BackgroundMigrationJob.pending.where(class_name: "ResetDuplicateCiRunnersTokenValuesOnProjects").find_each do |job| puts Gitlab::Database::BackgroundMigrationJob.mark_all_as_succeeded("ResetDuplicateCiRunnersTokenValuesOnProjects", job.arguments) end
- 如果您运行外部 PostgreSQL,尤其是 AWS RDS, 请检查您是否有 PostgreSQL 错误修复 以避免数据库崩溃。
更新14.9.5 => 14.10.5
$ wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-14.10.5-ce.0.el7.x86_64.rpm/download.rpm $ rpm -Uvh gitlab-ce-14.10.5-ce.0.el7.x86_64.rpm
风险点
- 在升级到 GitLab 14.10 之前,您必须已经在您的实例上安装了最新的 14.9.Z。升级到 GitLab 14.10 会执行数据库表中不需要的条目的并发索引删除。
ci_job_artifacts
这可能会运行数分钟,尤其是在表有大量流量并且迁移无法获取锁的情况下。建议让此过程完成,因为重新启动可能会导致数据丢失。 - 如果您运行外部 PostgreSQL,尤其是 AWS RDS, 请检查您是否有 PostgreSQL 错误修复 以避免数据库崩溃。
- 如果在运行 GitLab 14.9 时未完成升级到补丁级别 14.10.3 或更高版本,由于长时间运行的数据库数据更改可能会遇到一小时超时。
- 存在一种解决方法来手动完成数据更改和升级。
升级14.10.5 => 15.0.5
$ wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-15.0.5-ce.0.el7.x86_64.rpm/download.rpm $ rpm -Uvh gitlab-ce-15.0.5-ce.0.el7.x86_64.rpm
风险点
- 不再支持Elasticsearch 6.8 。在升级到 GitLab 15.0 之前,请将Elasticsearch 更新到任何 7.x 版本。
- 如果您运行外部 PostgreSQL,尤其是 AWS RDS, 请检查您是否有 PostgreSQL 错误修复 以避免数据库崩溃。
- 在删除对使用background_upload.
- 默认情况下禁用基于证书的 Kubernetes 集成(已弃用) ,但您可以通过
certificate_based_clusters功能标志
重新启用它,直到 GitLab 16.0。 - 当您将 GitLab Helm Chart 项目与 custom 一起使用时,请
serviceAccount
确保它具有对get
和资源list
的权限。serviceAccount``secret
custom_hooks_dir
现在在 Gitaly 中配置了用于配置全局服务器挂钩的设置。GitLab Shell 中的先前实现已在 GitLab 15.0 中删除。通过此更改,全局服务器挂钩仅存储在以挂钩类型命名的子目录中。全局服务器挂钩不再是自定义挂钩目录根目录中的单个挂钩文件。例如,您必须使用
而不是/ .d/*
./ - 在某些情况下,可能会错误地删除 Geo 辅助站点上的对象存储文件。请参阅Geo:GitLab 15.0.0 到 15.3.2 中辅助站点问题上的对象存储 LFS 文件删除不正确。
FF_GITLAB_REGISTRY_HELPER_IMAGE
功能标志被删除,帮助图像总是从 GitLab 注册表中提取。
升级15.0.5 => 15.4.4
$ wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-15.4.4-ce.0.el7.x86_64.rpm/download.rpm $ rpm -Uvh gitlab-ce-15.4.4-ce.0.el7.x86_64.rpm
风险点
- GitLab 15.4.0 包括一个批处理后台迁移,以从table中删除不正确的值expire_at``ci_job_artifacts。在较大的 GitLab 实例上,此迁移可能需要数小时或数天才能完成。
- 默认情况下,Gitaly 和 Praefect 节点使用时间服务器在
pool.ntp.org
. 如果您的实例无法连接pool.ntp.org
,请配置该NTP_HOST变量。
升级15.4.4 => 15.5.3
$ wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-15.5.3-ce.0.el7.x86_64.rpm/download.rpm $ rpm -Uvh gitlab-ce-15.5.3-ce.0.el7.x86_64.rpm
查看版本号
$ cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
四、回滚
前提:- 已安装与创建备份完全相同的 GitLab 版本
运行一次gitlab-ctl reconfigure
- GitLab 正在运行。如果没有,请运行
gitlab-ctl start
gitlab.rb
配置中描述的备份目录中gitlab_rails['backup_path']
。默认值为 /var/opt/gitlab/backups
. 备份文件需要归git
用户所有。
$ cp time-ce_gitlab_backup.tar /var/opt/gitlab/backups/ $ chown git:git /var/opt/gitlab/backups/time-ce_gitlab_backup.tar停止连接到数据库的进程。让 GitLab 的其余部分继续运行:
$ gitlab-ctl stop puma $ gitlab-ctl stop sidekiq # Verify $ gitlab-ctl status接下来,恢复备份,指定要恢复的备份的时间戳:
$ gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
若有排除的还原任务项
db
(数据库)uploads
(附件)builds
(CI 作业输出日志)artifacts
(CI 作业工件)lfs
(LFS 对象)registry
(容器注册表映像)pages
(页面内容)repositories
(Git 存储库数据)packages
(包)
$ gitlab-backup restore BACKUP=timestamp_of_backup SKIP=db,uploads重新配置、重启并检查GitLab:
$ gitlab-ctl reconfigure $ gitlab-ctl restart $ gitlab-rake gitlab:check SANITIZE=true检查敏感配置, 前提
/etc/gitlab/gitlab-secrets.json
已恢复
$ gitlab-rake gitlab:doctor:secrets执行完整性检查:
$ gitlab-rake gitlab:artifacts:check $ gitlab-rake gitlab:lfs:check $ gitlab-rake gitlab:uploads:check
五、测试
- 0
-
分享