故障排查

获取极狐GitLab 实例的状态

sudo gitlab-ctl status
sudo gitlab-rake gitlab:check SANITIZE=true
  • 关于使用 gitlab-ctl 执行维护任务的信息。
  • 关于使用 gitlab-rake 检查配置的信息。

RPM 软件包已安装错误

如果您正在使用 RPM 并且您正在进行升级,您可能会得到如下错误:

package gitlab-7.5.2_omnibus.5.2.1.ci-1.el7.x86_64 (which is newer than gitlab-7.5.2_ee.omnibus.5.2.1.ci-1.el7.x86_64) is already installed

您可以使用 --oldpackage 选项来覆盖这个版本检查:

sudo rpm -Uvh --oldpackage gitlab-7.5.2_ee.omnibus.5.2.1.ci-1.el7.x86_64.rpm

日志中出现 PG::UndefinedColumn: ERROR:.. 错误的 500 错误

升级后,如果您开始在日志中收到 500 错误,显示的消息类似于 PG::UndefinedColumn: ERROR:...,这些错误可能由以下原因引起:

错误:无法连接到内部极狐GitLab API

如果您在单独的 GitLab Pages 服务器上接收到错误 Failed to connect to the internal GitLab API,请查阅极狐GitLab Pages 管理员故障排查

在签名验证期间发生错误

如果您在运行 apt-get update 时收到此错误:

An error occurred during the signature verification

使用下面的命令更新极狐GitLab 软件包服务器的 GPG 密钥:

curl --silent "https://packages.gitlab.com/gpg.key" | apt-key add -
apt-get update

Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] [..] Command timed out after 3600s

如果数据库模式和数据更改(数据库迁移)必须在 1 小时内运行,升级将因 time out 错误而失败:

FATAL: Mixlib::ShellOut::CommandTimeout: rails_migration[gitlab-rails] (gitlab::database_migrations line 51)
had an error: Mixlib::ShellOut::CommandTimeout: bash[migrate gitlab-rails database]
(/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16)
had an error: Mixlib::ShellOut::CommandTimeout: Command timed out after 3600s:

要修复此错误:

  1. 运行剩余的数据库迁移:

    sudo gitlab-rake db:migrate
    

    此命令可能需要很长时间才能完成。使用 screen 或其他机制确保程序不会被中断,如果您的 SSH 会话中断。

  2. 完成升级

    sudo gitlab-ctl reconfigure
    
  3. 热重载 pumasidekiq 服务:

    sudo gitlab-ctl hup puma
    sudo gitlab-ctl restart sidekiq
    

丢失 asset 文件

升级过程中,极狐GitLab 可能无法正确地提供图像、JavaScript 和样式表等资产。这可能会生成 500 错误,或者 Web UI 可能无法正确呈现。

在大规模的极狐GitLab 环境上,如果负载均衡器后面的 Web 服务器之一显示此问题,则问题会间歇性地发生。

用于重新编译 assets 的 Rake 任务 并不适用于通过从 /opt/gitlab/embedded/service/gitlab-rails/public/assets 提供预编译资产的 Omnibus 安装方式。

潜在原因和修复手段:

ActiveRecord::LockWaitTimeout 错误,休眠后重试

在极少情况下,Sidekiq 繁忙,锁定迁移试图更改的表。要解决此问题,您应该将极狐GitLab 放入只读模式并停止 Sidekiq。

gitlab-ctl stop sidekiq

旧进程

极有可能的原因是有旧的 Puma 进程还在运行,指示客户端从极狐GitLab 的旧版本请求资产文件。由于这些文件不再存在,因此会返回 HTTP 404 错误。

重启是最好的方式来确保这些旧的 Puma 进程不再运行。

相应地:

  1. 停止 Puma:

    gitlab-ctl stop puma
    
  2. 检查是否有任何剩余的 Puma 进程,并杀死它们:

    ps -ef | egrep 'puma[: ]'
    kill <processid>
    
  3. 使用 ps 验证 Puma 进程已停止运行。

  4. 启动 Puma

    gitlab-ctl start puma
    

重复的 sprockets 文件

编译后的 asset 文件在每个版本中都有唯一的文件名称。 Sprockets 文件提供从应用程序代码中的文件名到唯一文件名的映射。

/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest*.json

请确保仅有一个 sprockets 文件。Rails 使用第一个文件。

可以用如下方式检查在 Omnibus 极狐GitLab 升级期间是否有重复的 sprockets 文件 在运行:

GitLab discovered stale file(s) from the previous install that need to be cleaned up.
The following files need to be removed:

/opt/gitlab/embedded/service/gitlab-rails/public/assets/.sprockets-manifest-e16fdb7dd73cfdd64ed9c2cc0e35718a.json

解决此问题的选项包括:

  • 如果您有包升级的输出,删除指定的文件。然后重启 Puma:

    gitlab-ctl restart puma
    
  • 如果您没有消息,执行重新安装(查看不完整安装以获取更多详细信息)以重新生成它。

  • 删除所有 sprockets 文件,然后按照不完整安装中的说明进行操作。

不完整安装

不完整安装也可能引发此问题。

验证软件包以确定是否存在问题:

  • 对 Debian 发行版:

    apt-get install debsums
    debsums -c gitlab-jh
    
  • 对 Red Hat (RPM) 发行版:

    rpm -V gitlab-jh
    

要重装来解决不完整安装问题:

  1. 检查安装的版本:

    • 对 Debian 发行版:

      apt --installed list gitlab-ee
      
    • 对 Red Hat (RPM) 发行版:

      rpm -qa gitlab-ee
      
  2. 重装软件包,指定已安装的版本。例如 16.9.0:

    • 对 Debian 发行版:

      apt-get install --reinstall gitlab-jh=16.9.0
      
    • 对 Red Hat (RPM) 发行版:

      yum reinstall gitlab-jh-16.9.0
      

NGINX Gzip 支持

检查是否已启用 nginx['gzip_enabled']

grep gzip /etc/gitlab/gitlab.rb

这可能会阻止一些 assets 来提供服务。