在经过一次gitlab服务器迁移中,由于docker容器gitlab历史版本的问题,之前用的版本无法找到镜像,只能在迁移过程中被迫升级。迁移升级后首先出现了项目不能被删除的情况,同时也出现了管理员账号无法保存全局设置的情况,都是500错误。
查看日志后发现出现OpenSSL::Cipher::CipherError等错误。经过资料查阅和验证,发现这个错误通常意味着在处理加密数据时遇到了问题,可能是由于密钥、密码或配置不匹配导致的加密解密失败。
项目不能删除的问题通过进入容器修改db数据库成功解决。
#gitlab 进入数据库命令 gitlab-rails dbconsole #执行这几个修改 #Clear project tokens gitlabhq_production=>UPDATE projects SET runners_token = null, runners_token_encrypted = null; #Clear group tokens gitlabhq_production=>UPDATE namespaces SET runners_token = null, runners_token_encrypted = null; #Clear instance tokens gitlabhq_production=>UPDATE application_settings SET runners_registration_token_encrypted = null; #Clear runner tokens gitlabhq_production=>UPDATE ci_runners SET token = null, token_encrypted = null;
执行后项目可正常删除,配置依旧不能修改,仍然是500错误,继续查找解决办法。
经过验证,最终通过以下方式解决:
1:使用命令gitlab-rake gitlab:doctor:secrets VERBOSE=1
来检查加密相关的配置和密钥是否正确无误。这个命令会帮助识别任何与密钥或加密相关的配置问题。
ApplicationSetting failures: 1 D, [2024-05-14T08:35:11.360072 #7405] DEBUG -- : - ApplicationSetting[1]:runners_registration_token,error_tracking_access_token,encrypted_ci_jwt_signing_key
发现error_tracking_access_token_encrypted和encrypted_ci_jwt_signing_key也出现了配置不一致的情况。
2:仍然通过gitlab-rails dbconsole进入数据库执行以下语句(新增了不一致的密钥名):
UPDATE projects SET runners_token = null, runners_token_encrypted = null; UPDATE namespaces SET runners_token = null, runners_token_encrypted = null; UPDATE application_settings SET runners_registration_token_encrypted = null; UPDATE application_settings SET encrypted_ci_jwt_signing_key = null; UPDATE application_settings SET error_tracking_access_token_encrypted = null; UPDATE ci_runners SET token = null, token_encrypted = null;
3:另外通过gitlab-rails c进入控制台 依次执行以下命令:
settings = ApplicationSetting.last settings.update_column(:runners_registration_token_encrypted, nil) settings.update_column(:encrypted_ci_jwt_signing_key, nil) settings.save!
4:为了确保配置生效 执行以下命令
#重载配置
gitlab-ctl reconfigure
#重启
gitlab-ctl restart
经过上述步骤 最终解决问题
如果还有其他密钥不一致问题请参考官方文献: