Gitlab数据迁移&在线升级后出现CI/CD页面500错误问题

遇到的问题

最近我对我的Gitlab服务进行了数据迁移并进行了相应的升级操作,但是在之后的使用过程中发现一些旧项目中的部分功能配置会出现异常情况,例如点击项目中的CI/CE就会出现500报错网页。

Gitlab

问题的原因

导致这样的原因的罪魁祸首是db_key_base参数出现了问题。

具体来说,db_key_base是一个64位随机字符串,它用于为应用程序生成安全的密钥,并在将敏感数据写入数据库之前对其进行加密。这种加密方式使用了先进的AES-256算法,可确保数据在传输或存储过程中不被窃取或篡改。

而Gitlab默认的备份机制在配备数据的过程中并不会对Gitlab.rbGitlab-secrets.json文件进行备份,导致了相关Gitlab相关服务出现异常情况。

Gitlab.rb配置了gitlab的域名、邮件发送信息、白名单等相关信息。

Gitlab-secrets.json文件存储了Gitlabdb secret信息。

解决方案

🚩 服务恢复方案一

如果在数据迁移的时候旧数据还在,可以找到gitlab-secrets.json并替换到新的Gitlab服务器中然后重启服务。

第一步 重新加载配置文件

1
gitlab-ctl reconfigure

第二步 重启Gitlab服务

1
gitlab-ctl restart

🚩 服务恢复方案二

重置所有的密钥和token。

第一步 进入Rails控制台

1
gitlab-rails console

Gitlab

这个命令输入后需要等一会,这个取决于你的服务器性能,一般会登上三十多秒才能出现irb(main):001:0>,之后就可以进行下一步输入了

第二步 将相关加密Token设置为null值

irb(main):001:0>中输入重置命令

1
Ci::Runner.all.update_all(token_encrypted: nil)

输入之后在输入exit退出Rails控制台。

第三步 进入数据库控制台

需要注意的是,在使用gitlab-rails dbconsole时,请务必非常小心。因为您将直接操作GitLab使用的数据库,所以错误的SQL语句有可能导致数据丢失或损坏。

1
gitlab-rails dbconsole

第四步 重置SQL数据库中的Token

1
gitlab-psql -d gitlabhq_production

然后依次输入一下命令

1
2
3
4
5
6
7
8
UPDATE projects SET runners_token = null, runners_token_encrypted = null;
# 将所有项目的runners_token和runners_token_encrypted字段设置为null。

UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
# 将所有命名空间(例如用户或组)的runners_token和runners_token_encrypted字段设置为null。

UPDATE application_settings SET runners_registration_token_encrypted = null;
# 将GitLab应用程序设置中的runners_registration_token_encrypted字段设置为null。

然后输入\q或者exit退出。

第五步 重启Gitlab服务

1
gitlab-ctl restart

至此整个Gitlab已经恢复正常。

如果对您有帮助,请小编喝一杯咖啡吧!