首页 > 其他分享 >`/etc/gitlab/gitlab-secrets.json`文件丢失时Gitlab恢复办法

`/etc/gitlab/gitlab-secrets.json`文件丢失时Gitlab恢复办法

时间:2023-12-13 18:07:16浏览次数:30  
标签:ci GitLab secrets gitlab Gitlab -- token null

/etc/gitlab/gitlab-secrets.json文件丢失时

如果您没有备份secrets文件,则必须完成几个步骤才能使GitLab重新正常工作。

secrets文件负责存储包含必需的敏感信息的列的加密密钥。如果密钥丢失,GitLab将无法解密这些列,从而阻止对以下项目的访问:

在CI/CD变量和runner认证等情况下,您可能遭遇未曾预料到的结果,例如:

  •  工作卡住了
  •   访问页面报500错误。

在这种情况下,您必须重置CI/CD变量和runner身份验证的所有令牌,这将在以下部分中详细描述。重置令牌后,您应该能够访问项目,作业开始再次运行。

本节中的步骤可能会导致上述项目的数据丢失。如果您是Premium或Ultimate客户,请考虑技术支持请求。

验证是否可以解密所有值

您可以确定数据库是否包含无法使用Rake任务解密的值。

sudo gitlab-rake gitlab:doctor:secrets

 进行备份

您必须直接修改GitLab数据以解决丢失的secrets文件。

请确保在尝试任何更改之前创建完整的数据库备份。

禁用用户双因素身份验证(2FA)

启用2FA的用户无法登录GitLab。在这种情况下,您必须为每个人禁用2FA,之后用户必须重新激活2FA。

 重置CI/CD变量

  1. 进入数据库控制台:

    对于Linux包(Omnibus)GitLab 14.1及更早版本:

    sudo gitlab-rails dbconsole
    

    对于Linux包(Omnibus)GitLab 14.2及更高版本:

    sudo gitlab-rails dbconsole --database main
    
  2. 检查 ci_group_variables 和 ci_variables 表:

    SELECT * FROM public."ci_group_variables";
    SELECT * FROM public."ci_variables";
    

    这些是你需要删除的变量。

  3.  删除所有变量:

    DELETE FROM ci_group_variables;
    DELETE FROM ci_variables;
    
  4. 如果您知道要从中删除变量的特定组或项目,则可以在 DELETE 中包含一个 WHERE 语句来指定:

    DELETE FROM ci_group_variables WHERE group_id = <GROUPID>;
    DELETE FROM ci_variables WHERE project_id = <PROJECTID>;
    

您可能需要重新配置或重新启动GitLab以使更改生效。

重置跑步者注册令牌

  1. 进入数据库控制台:

    对于Linux包(Omnibus)GitLab 14.1及更早版本:

    sudo gitlab-rails dbconsole
    

    对于Linux包(Omnibus)GitLab 14.2及更高版本:

    sudo gitlab-rails dbconsole --database main
    
  2. 清除项目、组和整个实例的所有令牌:

    最后的 UPDATE 操作会阻止跑步者获得新的作业。你必须注册新的跑步者。

    -- Clear project tokens
    UPDATE projects SET runners_token = null, runners_token_encrypted = null;
    -- Clear group tokens
    UPDATE namespaces SET runners_token = null, runners_token_encrypted = null;
    -- Clear instance tokens
    UPDATE application_settings SET runners_registration_token_encrypted = null;
    -- Clear key used for JWT authentication
    -- This may break the $CI_JWT_TOKEN job variable:
    -- https://gitlab.com/gitlab-org/gitlab/-/issues/325965
    UPDATE application_settings SET encrypted_ci_jwt_signing_key = null;
    -- Clear runner tokens
    UPDATE ci_runners SET token = null, token_encrypted = null;
    

重置挂起的管道作业

  1. 进入数据库控制台:

    对于Linux包(Omnibus)GitLab 14.1及更早版本:

    sudo gitlab-rails dbconsole
    

    对于Linux包(Omnibus)GitLab 14.2及更高版本:

    sudo gitlab-rails dbconsole --database main
    
  2. 清除挂起作业的所有令牌:

    对于GitLab 15.3及更早版本:

    -- Clear build tokens
    UPDATE ci_builds SET token = null, token_encrypted = null;
    

    对于GitLab 15.4及更高版本:

    -- Clear build tokens
    UPDATE ci_builds SET token_encrypted = null;
    

类似的策略可以用于其余特征。通过删除无法解密的数据,GitLab可以恢复运行,并且可以手动替换丢失的数据。

修复集成和webhooks

如果您丢失了您的secrets,集成设置和webhooks设置页面可能会显示 500 错误消息。当您尝试使用先前配置的集成或webhook访问项目仓库时,丢失secrets也可能产生 500 错误。

修复方法是截断受影响的表(包含加密列的表)。这将删除所有已配置的集成、webhook和相关元数据。在删除任何数据之前,您应该验证secrets是根本原因。

  1. 进入数据库控制台:

    对于Linux包(Omnibus)GitLab 14.1及更早版本:

    sudo gitlab-rails dbconsole
    

    对于Linux包(Omnibus)GitLab 14.2及更高版本:

    sudo gitlab-rails dbconsole --database main
    
  2. 截断以下表格:

    -- truncate web_hooks table
    TRUNCATE integrations, chat_names, issue_tracker_data, jira_tracker_data, sl
    

标签:ci,GitLab,secrets,gitlab,Gitlab,--,token,null
From: https://blog.51cto.com/u_14398145/8804697

相关文章

  • gitlab+sonarqube实现自动化代码漏洞扫描(centos内网环境安装配置及使用遇到的问题)
    sonarqube可以与源码管理工具gitlab集成,实现提交代码后自动扫描检测代码的相关漏洞。该CI/CD过程大致为:1、研发人员提交源码至gitlab服务器—>2、gitlabrunner执行指定脚本(由项目的.gitlab-ci.yml配置文件指定具体内容,如编译项目、开启代码检测) —>3、sonar-scanner对项目进......
  • GitLab部署vue项目至GitLab Pages流水线配置
    image:node:16.15.0#表示使用有nodejs环境的docker,自己项目用的什么版本这就写什么版本stages:-deploypages:#!!!必须!!!使用pages关键字stage:deployscript:-npminstall-npmrunbuild-rm-rfpublic#删除public目录,开发过......
  • 在gitlab中如何导出、导入某个项目(提交记录不变),对某个项目进行迁移
    1、需求说明 在项目的迁移中遇到,需要将gitlab中的某个项目进行迁移的过程。关键点是,需要保持提交记录不变。 本文档下面的内容,就介绍这个过程。 2、项目导出、导入的过程 2.1、导出项目 a、登录到gitlab页面  b、点击要迁移的项目   可以看到项目......
  • day11 Jenkins Pipeline语法-Jenkins基于Gitlab的授权认证 (4.3.1-4.4)
    一、JenkinsPipeline语法上JenkinsPipeline语法Jenkins有多种方式实现交付流水线。其中,JenkinsPipeline是一种比较流行的方式,它提供一个DSL(DomainSpecificLanguage的缩写,)来描述交付流水线。官网地址:https://www.jenkins.io/doc/book/pipeline/syntax/1、什么是Jenkin......
  • 群晖中升级gitlab的严重问题
    重要:此文并未成功解决问题,仅对挣扎过程进行记录。如读者不幸遇到相同问题,在阅读下面问题描述之前,请暂停执行并备份数据,包括postgresql数据文件夹和gitlab文件夹。 1.跨版本升级在套件中心中,若因版本太旧(跳过了1个或多个版本号),则需要手动安装。从群晖应用页面安装特定版......
  • Gitlab项目仓库配置访问令牌,实现无密码拉取代码
    修改地址仓库地址cd$projectcd.gitvimconfig[remote"origin"] url=https://oauth2:访问令牌@仓库地址或者使用basic认证[remote"origin"] url=https://username:pwd@仓库地址ssh公钥加入到gitlab#配置密钥一路回车ssh-keygen-trsa-C'xxx@xxx.......
  • ubuntu部署gitlab服务器
    ubuntu部署gitlab服务器笔者使用的ubuntu版本为20.04,gitlab版本为16.2.1(此篇文章部分引用他人文件,单纯记录,如有侵权请联系)1、更新命令cd/homemkdirgitlabcd/gitlabsudoaptupdatesudoapt-getupgradesudoapt-getinstallcurlopenssh-serverca-certificates......
  • Docker-Compose部署Gitlab以及Gitlab配置SMTP邮件服务
    使用Docker-Compose部署Gitlab拉取镜像地址:https://hub.docker.com/r/gitlab/gitlab-ce/tags拉取到镜像后,使用dockertag修改镜像,dockerpush推送到自己的镜像仓库(内网部署)编写docker-compose文件##创建容器挂载出来的文件夹mkdir/gitlab&&cd/gitlabmkdir-pdata/{l......
  • 搭建GitLab的cicd流水线
    大致内容如下通过部署一个简单的项目到gitlabpages初步了解gitlabCI/CD了解gitlabCI/CD基础概念、运行机制等使用gitlab自带runner进行自动化部署、使用ssh命令操作部署远程服务器在自己服务器安装gitlabrunner进行自动化部署两种runner部署耗时对比......
  • 极狐GitLab—新一代源代码管理仓库
    产品概述    极狐GitLab是一款具有软件开发全生命周期的DevOps能力的新一代源代码管理仓库,无缝集成代码托管、敏捷管理、CI/CD,从需求管理到应用上线能够形成数据的完整串联。极狐GitLab具有高可用可扩展的架构特点,可提供万人规模的架构行业实践参考和专业服务支持;提供专业......