GitLab 12 跨版本 13 升级
本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)
本文作者: 苏洋
创建时间: 2020年08月04日 统计字数: 4450字 阅读时间: 9分钟阅读 本文链接: https://soulteary.com/2020/08/04/gitlab-version-12-cross-version-13-upgrade.html
GitLab 12 跨版本 13 升级
本以为 《GitLab 简明维护指南(v2020.05)》 足够解决接下来的所有问题,没想到在 v12 版本中, GitLab 官方因为一些变更引入了“升级额外操作”的步骤。
也就是说,常规的修改低版本应用版本号到高版本版本号,由 Ruby 升级脚本执行升级操作的模式不完全生效了。
而且在升级过程中,也会遇到一些额外的小问题,这里我们就来聊聊如何在有“升级额外操作”的背景下进行应用升级。
写在前面
因为我们使用的是容器方案,所以升级还是比较轻松的。如果你还未曾搭建 GitLab ,可以参考以往文章中的gitlab标签的文章内容。
确认升级路线
官方首先明确了几种不同的升级路线图,其中各自有一些关键升级版本。
目标版本13.2.0
当前版本大于等于 11.5.0,则需要使用的升级路线为:
11.5.0-> 11.11.8-> 12.0.12-> 12.10.6-> 13.0.0->13.2.0
其中,11.11、12.0、12.10、13.0 四个版本是必须的。
目标版本13.0.1
当前版本大于等于 11.10.8,则需要使用的升级路线为:
11.10.5-> 11.11.8-> 12.0.12-> 12.10.6->13.0.1
其中,11.11、12.0、12.10 三个版本是必须的。
目标版本12.10.6
当前版本大于等于 11.3.4,则需要使用的升级路线为:
11.3.4-> 11.11.8-> 12.0.12->12.10.6
其中,11.11、12.0 两个版本是必须的。
目标版本12.9.5
当前版本大于等于 10.4.5,则需要使用的升级路线为:
10.4.5-> 10.8.7-> 11.11.8-> 12.0.12->12.9.5
其中,10.8、11.11、12.0、12.9.5 四个版本是必须的。
目标版本12.2.5
当前版本大于等于 9.2.6,则需要使用的升级路线为:
9.2.6-> 9.5.10-> 10.8.7-> 11.11.8-> 12.0.12->12.2.5
其中,9.5、10.8、11.11、12.0 、12.2 五个版本是必须的。
升级实践
当明确升级路线后,升级只需要跟随上面的路径进行操作即可,排除各种问题升级成功后,你将会看到类似下面的日志。
Recipe: gitlab::gitlab-workhorse
* runit_service[gitlab-workhorse] action restart (up to date)
Recipe: gitlab::gitlab-pages
* runit_service[gitlab-pages] action restart (up to date)
Running handlers:
Running handlers complete
Chef Client finished, 259/810 resources updated in 01 minutes 18 seconds
gitlab Reconfigured!
Checking for an omnibus managed postgresql: OK
Checking if postgresql['version'] is set: OK
Checking if we already upgraded: OK
下面来聊聊,你可能遇到的一些问题。
小插曲一:错误的升级版本指定
我最初升级时,不知道 v12 版本有这么多“讲究”,直接将我当前使用的 * gitlab/gitlab-ce:12.10.3-ce.0修改为了最新的 gitlab/gitlab-ce: 13.2.2-ce.0*,意料之中,遇到了许多的不兼容问题。
所幸的是,程序有异常检查,判断版本不符合要求,并未允许执行升级操作,不停输出类似下面的日志,提示我们检查升级文档。
Thank you for using GitLab Docker Image!
Current version: gitlab-ce=13.2.2-ce.0
Configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
And restart this container to reload settings.
To do it use docker exec:
docker exec -it gitlab vim /etc/gitlab/gitlab.rb
docker restart gitlab
For a comprehensive list of configuration options please see the Omnibus GitLab readme
https://gitlab.comdock /gitlab-org/omnibus-gitlab/blob/master/README.md
If this container fails to start due to permission problems try to fix it by executing:
docker exec -it gitlab update-permissions
docker restart gitlab
Cleaning stale PIDs & sockets
It seems you are upgrading from major version 12 to major version 13.
It is required to upgrade to the latest 13.0.x version first before proceeding.
Please follow the upgrade documentation at https://docs.gitlab.com/ee/policy/maintenance.html#upgrading-major-versions
Thank you for using GitLab Docker Image!
Current version: gitlab-ce=13.2.2-ce.0
Configure GitLab for your system by editing /etc/gitlab/gitlab.rb file
And restart this container to reload settings.
To do it use docker exec:
docker exec -it gitlab vim /etc/gitlab/gitlab.rb
docker restart gitlab
...
...
Cleaning stale PIDs & sockets
It seems you are upgrading from major version 12 to major version 13.
It is required to upgrade to the latest 13.0.x version first before proceeding.
Please follow the upgrade documentation at https://docs.gitlab.com/ee/policy/maintenance.html#upgrading-major-versions
gitlab.lab.com exited with code 1
没有关系,按照官方路线修改版本号进行升级即可。当然,这里建议你执行了完整数据备份。
小插曲二:程序生成配置错误
在容器环境下,* gitlab.rb* 配置是由程序读取环境变量自动生成的,因为跨版本,所以这里的配置可能混杂了多个版本的内容,而产生版本不兼容的问题。
实际运行会遇到这样的报错:
Recipe Compile Error in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/default.rb
解决方案也比较简单,让程序在某个可运行的版本下,重新生成一份配置就好了。
cd /etc/gitlab
mv gitlab.rb gitlab.rb.bak
touch gitlab.rb
gitlab-ctl reconfigure
小插曲三:不支持的环境变量配置项
在读取环境变量的过程中,也可能会遇到一些已经被废弃的配置项而产生的运行异常停止,比如下面这样:
Mixlib::Config::UnknownConfigOptionError
----------------------------------------
Reading unsupported config value gitlab_monitor.
解决方案:将提示中的不支持的配置项目删除掉或者注释掉就好了。
比如 # gitlab_monitor['enable'] = false
。
小插曲四:GitLab CI Shell 模式停止工作
在升级完毕后,会遇到部分 Shell 模式的 CI停止工作。
Running with gitlab-runner 13.2.2 (a998cacd)
on ubuntu-basic-18-04 tUfFiKLG
Preparing the "shell" executor
00:00
Using Shell executor...
Preparing environment
00:00
Running on ubuntu-basic-18-04...
ERROR: Job failed (system failure): prepare environment: exit status 1. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information
这是因为新版本的GitLab会在调用 CI 的时候,发送 --login
参数,如果用户目录包含 .bashrc
、 .bash_logout
文件,则会被加载执行,这些文件中可能存在一些意外退出执行过程的命令,如 .bash_logout
可能存在下面的内容。
if [ "$SHLVL" = 1 ]; then
[ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q
fi
解决方案:删除或注释掉内容即可。
最后
最近事多,先写到这里吧。
--EOF
- 你常用的10个MySQL命令
- WCF技术剖析之三十一: WCF事务编程[下篇]
- WCF技术剖析之三十一:WCF事务编程[上篇]
- 学习SpringMVC——你们要的REST风格的CRUD来了
- 并发中的同步--WCF并发体系的同步机制实现
- WCF 技术剖析之三十三:你是否了解WCF事务框架体系内部的工作机制?[下篇]
- 学习SpringMVC——从HelloWorld开始
- 小程序年底重磅更新,小游戏上线,最强入口也来了!
- 学习SpringMVC——如何获取请求参数
- 谈谈关于MVP模式中V-P交互问题
- 学习Spring——两个你熟悉的不能再熟悉的场景使用
- 学习Spring——依赖注入
- 机会真的多吗?
- 浅析Hadoop大数据分析与应用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS7-Nginx配置Let's-Encrypt-SSL证书
- CentOS7-Nginx编译安装
- 总被审稿人提起的多重假设检验校正是什么?
- Python网络编程
- 读一本书 | systemverilog之内建数据类型
- 实战解读ASP.NET Core身份认证
- 读一本书 | systemverilog之内建数据类型(下)
- 面向对象有限元编程|节点类
- 面向对象有限元编程|抽象
- Python多线程
- Python描述器
- Spring Cloud with Kubernetes 之 Config Maps
- 前端需知的CDN加速原理
- 大型 web 应用公共组件架构思考
- 前端赋能业务 - Node实现自动化部署平台