回复:gitlab-ce-16.8.2
几天前有报道称,所有项目都存在开放式 CI/CD 设置问题。 将出现 500 错误页面。我可以重复这种行为,但没有人记得它最初是什么时候开始的。
经过一番调查和疯狂的谷歌搜索后,我们的问题似乎与这个旧问题相符https://gitlab.com/gitlab-org/gitlab/-/issues/22782.
我运行了最近评论中提到的命令,但我们知道我们可能必须重新注册跑步者。
# gitlab-psql
psql (14.10)
Type "help" for help.
gitlabhq_production=# UPDATE projects SET runners_token = null, runners_token_encrypted = null;
UPDATE 153
gitlabhq_production=# UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
UPDATE 258
gitlabhq_production=# UPDATE application_settings SET runners_registration_token_encrypted = null;
UPDATE 1
gitlabhq_production=# UPDATE ci_runners SET token = null, token_encrypted = null;
UPDATE 4
这使我们能够到达设置页面。 此时发现现在显示一个横幅“获取变量时出错”。并且在 webui 中看不到任何内容。如果有人尝试添加变量,横幅会切换为“我们这边出了点问题。请重试。”
我可以看到 pgsql 的 ci_variables 表中的条目以及填充的 crypto_value、encrypted_value_salt 和 crypto_value_iv 值。(包括清理后的输出)
gitlabhq_production=# select * from ci_variables;
id | key | value | encrypted_value | encrypted_value_salt | encrypted_value_iv | project_id | prot
ected | environment_scope | masked | variable_type | raw | description
21 | ssh_host_ecdsa_key | | <redacted> | <redacted> | <redacted> | 159 | f | * | f | 2 | f | |
(25 rows)
我构建了一个测试服务器,复制了 /etc/gitlab 内容并恢复了几个月前的备份。这是有效的,我可以在 ci_variables 表中看到相同的条目,但也可以在 webUI 中浏览到它们。
现在,我不确定如果运行者令牌与 ci_variables 相关,上面的命令是否也会导致变量问题。此时,我不确定是否应该删除 ci_variables 并从临时恢复实例中手动重建它们(大约有 25 个,所以并不可怕),或者是否有更好的方法来处理这个问题。我对各种容器操作也没有太多经验,因此希望找出根本原因或建立时间表。
非常感谢建议、建设性反馈、文章和/或有针对性的链接。
对此的跟进有所延迟,但事实证明这是准备新服务器的潜在操作顺序。这是为了几个月前迁移到更现代的操作系统(CentOS 7 到 RHEL 9)。没有更早发现这一问题主要是测试计划问题。我对临时虚拟机的恢复成功了,所以我必须假设我在复制 gitlab-secrets 之后跳过了一个关键的
gitlab-ctl reconfigure
,但在 之前 gitlab-backup restore
,如迁移文档中所述。
假设是这种情况,我按照 gitlab 故障排除指南进行操作 当机密文件丢失时。
这恢复了大部分功能,我能够使用临时备份通过复制/粘贴功能手动重新创建 25 个变量。与 CI/CD 设置/运行程序相关的几个 WebUI 页面仍然存在问题。
重新运行验证数据库值可以使用当前机密进行解密步骤识别出更多字段。
# gitlab-rake gitlab:doctor:secrets VERBOSE=1
I, [2024-04-09T17:08:22.275377 #1762562] INFO -- : - ApplicationSetting failures: 1
D, [2024-04-09T17:08:22.275468 #1762562] DEBUG -- : - ApplicationSetting[1]: customers_dot_jwt_signing_key, runners_registration_token, error_tracking_access_token
检查 application_settings 表时没有
的条目customers_dot_jwt_signing_key
error_tracking_access_token
我确实发现:
encrypted_customers_dot_jwt_signing_key
encrypted_customers_dot_jwt_signing_key_iv
error_tracking_access_token_encrypted
通过
gitlab-psql
以类似于故障排除文档的方式手动删除加密条目。
UPDATE application_settings SET encrypted_customers_dot_jwt_signing_key = null, encrypted_customers_dot_jwt_signing_key_iv = null, error_tracking_access_token_encrypted = null;
此后,CI/CD 和运行程序的所有 WebUI 部分都可以工作。开发人员能够删除现有的跑步者条目并添加更新的跑步者配置以设置新的密钥。
希望这对将来的人有帮助。