{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: 私有化部署

{{< /details >}}

极狐GitLab 提供了用于常规维护的 Rake 任务。

收集极狐GitLab 和系统信息

此命令收集有关您的极狐GitLab安装及其运行系统的信息。这些信息在寻求帮助或报告议题时可能会很有用。在多节点环境中,运行此命令的节点需运行极狐GitLab Rails,以避免 PostgreSQL 套接字错误。

  • Linux 软件包安装:

    sudo gitlab-rake gitlab:env:info
    
  • 自编译安装:

    bundle exec rake gitlab:env:info RAILS_ENV=production
    

示例输出:

System information
System:         Ubuntu 20.04
Proxy:          no
Current User:   git
Using RVM:      no
Ruby Version:   2.7.6p219
Gem Version:    3.1.6
Bundler Version:2.3.15
Rake Version:   13.0.6
Redis Version:  6.2.7
Sidekiq Version:6.4.2
Go Version:     unknown

GitLab information
Version:        15.5.5-ee
Revision:       5f5109f142d
Directory:      /opt/gitlab/embedded/service/gitlab-rails
DB Adapter:     PostgreSQL
DB Version:     13.8
URL:            https://app.gitaly.gcp.gitlabsandbox.net
HTTP Clone URL: https://app.gitaly.gcp.gitlabsandbox.net/some-group/some-project.git
SSH Clone URL:  git@app.gitaly.gcp.gitlabsandbox.net:some-group/some-project.git
Elasticsearch:  no
Geo:            no
Using LDAP:     no
Using Omniauth: yes
Omniauth Providers:

GitLab Shell
Version:        14.12.0
Repository storage paths:
- default:      /var/opt/gitlab/git-data/repositories
- gitaly:       /var/opt/gitlab/git-data/repositories
GitLab Shell path:              /opt/gitlab/embedded/service/gitlab-shell


Gitaly
- default Address:      unix:/var/opt/gitlab/gitaly/gitaly.socket
- default Version:      15.5.5
- default Git Version:  2.37.1.gl1
- gitaly Address:       tcp://10.128.20.6:2305
- gitaly Version:       15.5.5
- gitaly Git Version:   2.37.1.gl1

显示极狐GitLab许可证信息

{{< details >}}

  • Tier: 专业版,旗舰版
  • Offering: 极狐GitLab私有化部署

{{< /details >}}

此命令显示有关您的极狐GitLab许可证的信息以及使用的席位数量。它仅在极狐GitLab企业版安装中可用:许可证不能安装在极狐GitLab基础版中。这些信息在与支持部门交流时或程序化检查您的许可证参数时可能会很有用。

  • Linux 软件包安装:

    sudo gitlab-rake gitlab:license:info
    
  • 自编译安装:

    bundle exec rake gitlab:license:info RAILS_ENV=production
    

示例输出:

Today's Date: 2020-02-29
Current User Count: 30
Max Historical Count: 30
Max Users in License: 40
License valid from: 2019-11-29 to 2020-11-28
Email associated with license: user@example.com

检查极狐GitLab配置

gitlab:check Rake 任务运行以下 Rake 任务:

  • gitlab:gitlab_shell:check
  • gitlab:gitaly:check
  • gitlab:sidekiq:check
  • gitlab:incoming_email:check
  • gitlab:ldap:check
  • gitlab:app:check
  • gitlab:geo:check(仅当您运行Geo时)

它检查每个组件是否按照安装指南进行设置,并建议修复发现的问题。此命令必须在您的应用服务器上运行,并且在组件服务器上(例如 Gitaly)无法正确工作。

您也可以查看我们的故障排除指南:

此外,您还应该验证数据库值是否可以使用当前密钥解密

要运行 gitlab:check,请执行以下命令:

  • Linux 软件包安装:

    sudo gitlab-rake gitlab:check
    
  • 自编译安装:

    bundle exec rake gitlab:check RAILS_ENV=production
    

如果您希望从输出中省略项目名称,请为 gitlab:check 使用 SANITIZE=true

示例输出:

Checking Environment ...

Git configured for git user? ... yes
Has python2? ... yes
python2 is supported version? ... yes

Checking Environment ... Finished

Checking GitLab Shell ...

GitLab Shell version? ... OK (1.2.0)
Repo base directory exists? ... yes
Repo base directory is a symlink? ... no
Repo base owned by git:git? ... yes
Repo base access is drwxrws---? ... yes
post-receive hook up-to-date? ... yes
post-receive hooks in repos are links: ... yes

Checking GitLab Shell ... Finished

Checking Sidekiq ...

Running? ... yes

Checking Sidekiq ... Finished

Checking GitLab App...

Database config exists? ... yes
Database is SQLite ... no
All migrations up? ... yes
GitLab config exists? ... yes
GitLab config up to date? ... no
Cable config exists? ... yes
Resque config exists? ... yes
Log directory writable? ... yes
Tmp directory writable? ... yes
Init script exists? ... yes
Init script up-to-date? ... yes
Redis version >= 2.0.0? ... yes

Checking GitLab ... Finished

重建 authorized_keys 文件

在某些情况下,有必要重建 authorized_keys 文件,例如,如果在升级后您在通过 SSH 推送时收到 Permission denied (publickey) 错误,并在 gitlab-shell.log 文件 中发现 404 Key Not Found 错误。要重建 authorized_keys,请运行:

  • Linux 软件包安装:

    sudo gitlab-rake gitlab:shell:setup
    
  • 自编译安装:

    cd /home/git/gitlab
    sudo -u git -H bundle exec rake gitlab:shell:setup RAILS_ENV=production
    

示例输出:

This will rebuild an authorized_keys file.
You will lose any data stored in authorized_keys file.
Do you want to continue (yes/no)? yes

清除 Redis 缓存

如果由于某种原因仪表盘显示了错误信息,您可能需要清除 Redis 的缓存。要执行此操作,请运行:

  • Linux 软件包安装:

    sudo gitlab-rake cache:clear
    
  • 自编译安装:

    cd /home/git/gitlab
    sudo -u git -H bundle exec rake cache:clear RAILS_ENV=production
    

预编译资产

有时在版本升级期间,您可能会遇到一些错误的 CSS 或缺少一些图标。在这种情况下,请尝试再次预编译资产。

此 Rake 任务仅适用于自编译安装。有关在运行 Linux 软件包时解决此问题的更多信息,请阅读更多内容。Linux 软件包的指南可能适用于极狐GitLab 的 Kubernetes 和 Docker 部署,尽管通常情况下,基于容器的安装没有缺少资产的问题。

  • 自编译安装:

    cd /home/git/gitlab
    sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production
    

对于 Linux 软件包安装,未优化的资产(JavaScript、CSS)在极狐GitLab 上游版本发布时被冻结。Linux 软件包安装包含那些资产的优化版本。除非您在安装软件包后在生产机器上修改 JavaScript / CSS 代码,否则没有理由在生产机器上重新执行 rake gitlab:assets:compile。如果您怀疑资产已损坏,您应该重新安装 Linux 软件包。

检查到远程站点的 TCP 连接

有时您需要知道您的极狐GitLab安装是否可以连接到另一台计算机上的 TCP 服务(例如 PostgreSQL 或 Web 服务器),以解决代理问题。包括了一个 Rake 任务来帮助您进行此操作。

  • Linux 软件包安装:

    sudo gitlab-rake gitlab:tcp_check[example.com,80]
    
  • 自编译安装:

    cd /home/git/gitlab
    sudo -u git -H bundle exec rake gitlab:tcp_check[example.com,80] RAILS_ENV=production
    

清除独占租约 (危险)

极狐GitLab 使用共享锁机制:ExclusiveLease 来防止在共享资源中同时进行操作。一个示例是对存储库运行定期垃圾收集。

在非常特定的情况下,由独占租约锁定的操作可能会失败而不释放锁。如果您无法等待它过期,您可以运行此任务以手动清除它。

要清除所有独占租约:

{{< alert type=”warning” >}}

在极狐GitLab 或 Sidekiq 运行时不要运行它

{{< /alert >}}

sudo gitlab-rake gitlab:exclusive_lease:clear

要指定租约 类型 或租约 类型 + id,请指定范围:

# 清除存储库垃圾收集的所有租约:
sudo gitlab-rake gitlab:exclusive_lease:clear[project_housekeeping:*]

# 清除特定项目中的存储库垃圾收集租约:(id=4)
sudo gitlab-rake gitlab:exclusive_lease:clear[project_housekeeping:4]

显示数据库迁移状态

请参阅后台迁移文档,了解在升级极狐GitLab时如何检查迁移是否完成。

要检查特定迁移的状态,可以使用以下 Rake 任务:

sudo gitlab-rake db:migrate:status

要检查 Geo 辅助站点上的跟踪数据库,可以使用以下 Rake 任务:

sudo gitlab-rake db:migrate:status:geo

这会输出一个表格,其中每个迁移的 Statusupdown。示例:

database: gitlabhq_production

 Status   Migration ID    Type     Milestone    Name
--------------------------------------------------
   up     20240701074848  regular  17.2         AddGroupIdToPackagesDebianGroupComponents
   up     20240701153843  regular  17.2         AddWorkItemsDatesSourcesSyncToIssuesTrigger
   up     20240702072515  regular  17.2         AddGroupIdToPackagesDebianGroupArchitectures
   up     20240702133021  regular  17.2         AddWorkspaceTerminationTimeoutsToRemoteDevelopmentAgentConfigs
   up     20240604064938  post     17.2         FinalizeBackfillPartitionIdCiPipelineMessage
   up     20240604111157  post     17.2         AddApprovalPolicyRulesFkOnApprovalGroupRules

从极狐GitLab 17.1 开始,迁移以符合极狐GitLab 发布节奏的顺序执行。

运行未完成的数据库迁移

数据库迁移可能会卡在未完成状态,在 sudo gitlab-rake db:migrate:status 命令输出中呈现 down 状态。

  1. 要完成这些迁移,请使用以下 Rake 任务:

    sudo gitlab-rake db:migrate
    
  2. 命令完成后,运行 sudo gitlab-rake db:migrate:status 以检查所有迁移是否已完成(状态为 up)。

  3. 热重载 pumasidekiq 服务:

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

从极狐GitLab 17.1 开始,迁移以符合极狐GitLab 发布节奏的顺序执行。

重建数据库索引

{{< details >}}

  • 状态:实验

{{< /details >}}

{{< alert type=”warning” >}}

此功能是实验性的,默认情况下未启用。在生产环境中运行时请谨慎,并在非高峰时段运行。

{{< /alert >}}

数据库索引可以定期重建,以回收空间并随着时间的推移保持健康的索引膨胀水平。重新索引还可以作为常规 cron 作业运行。“健康”水平的膨胀高度依赖于特定索引,但通常应低于 30%。

先决条件:

  • 此功能需要 PostgreSQL 12 或更高版本。
  • 不支持这些索引类型:表达式索引、分区索引和用于约束排除的索引。

要手动重建数据库索引:

  1. 可选。要向 Grafana(4.6 或更高版本)端点发送注释,请使用这些自定义环境变量启用注释(参见设置自定义环境变量):

    1. GRAFANA_API_URL:Grafana 的基本 URL,例如 http://some-host:3000
    2. GRAFANA_API_KEY:至少具有 Editor role 的 Grafana API 密钥。
  2. 运行 Rake 任务以重建估计膨胀最高的两个索引:

    sudo gitlab-rake gitlab:db:reindex
    
  3. 重新索引任务(gitlab:db:reindex)仅重建每个数据库中膨胀最高的两个索引。要重建两个以上的索引,请再次运行任务,直到所有需要的索引都已重建。

注意事项

  • 重建数据库索引是一项磁盘密集型任务,因此您应该在非高峰时段执行该任务。在高峰时段运行任务可能会导致膨胀增加,并且还可能导致某些查询执行缓慢。
  • 任务需要用于恢复索引的可用磁盘空间。创建的索引附加了 _ccnew。如果重新索引任务失败,重新运行任务会清理临时索引。
  • 完成数据库索引重建所需的时间取决于目标数据库的大小。可能需要几个小时到几天。

转储数据库架构

在极少数情况下,即使所有数据库迁移都已完成,数据库架构也可能与应用程序代码预期的不同。如果发生这种情况,可能会导致极狐GitLab 中出现奇怪的错误。

要转储数据库架构:

SCHEMA=/tmp/structure.sql gitlab-rake db:schema:dump

Rake 任务会创建一个包含数据库架构转储的 /tmp/structure.sql 文件。

要确定是否有任何差异:

  1. 转到 db/structure.sql 文件中的 gitlab 项目。选择与您的极狐GitLab版本匹配的分支。例如,极狐GitLab 16.2 的文件:https://jihulab.com/gitlab-cn/gitlab/-/blob/16-2-stable-ee/db/structure.sql
  2. /tmp/structure.sql 与您版本的 db/structure.sql 文件进行比较。

检查数据库架构不一致性

{{< history >}}

  • 在极狐GitLab 15.11 中引入。

{{< /history >}}

此 Rake 任务检查数据库架构是否存在任何不一致性并在终端中打印它们。此任务是一个诊断工具,应在极狐GitLab 支持的指导下使用。您不应该将任务用于常规检查,因为数据库不一致性可能是预期的。

gitlab-rake gitlab:db:schema_checker:run

收集有关数据库的信息和统计数据

{{< history >}}

  • 在极狐GitLab 17.11 中引入。

{{< /history >}}

gitlab:db:sos 命令收集有关您的极狐GitLab数据库的配置、性能和诊断数据,以帮助您解决问题。运行此命令的位置取决于您的配置:

  • Scaled 极狐GitLab:在您的 Puma 或 Sidekiq 服务器上。
  • 云原生安装:在工具箱 pod 上。
  • 所有其他配置:在您的极狐GitLab服务器上。

根据需要修改命令:

  • 默认路径 - 要使用默认文件夹路径(tmp/sos.zip)运行命令,请运行 gitlab-rake gitlab:db:sos
  • 自定义路径 - 要更改文件夹路径,请运行 gitlab-rake gitlab:db:sos["custom/path/to/folder"]
  • Zsh 用户 - 如果您没有修改 Zsh 配置,您必须在整个命令周围添加引号,如下所示:gitlab-rake "gitlab:db:sos[custom/path/to/folder]"

Rake 任务运行五分钟。它在您指定的路径中创建一个压缩文件夹。压缩文件夹包含大量文件。

启用可选查询统计数据

gitlab:db:sos Rake 任务还可以使用 pg_stat_statements 扩展收集数据以排除慢查询故障。

启用此扩展是可选的,并且需要重新启动 PostgreSQL 和极狐GitLab。此数据可能需要排查极狐GitLab 由慢数据库查询引起的性能问题。

先决条件:

  • 您必须是具有超级用户权限的 PostgreSQL 用户才能启用或禁用扩展。

{{< tabs >}}

{{< tab title=”Linux 软件包 (Omnibus)” >}}

  1. 修改 /etc/gitlab/gitlab.rb 以添加以下行:

    postgresql['shared_preload_libraries'] = 'pg_stat_statements'
    
  2. 运行重新配置:

    sudo gitlab-ctl reconfigure
    
  3. PostgreSQL 需要重新启动以加载此扩展,这需要极狐GitLab 也重新启动:

    sudo gitlab-ctl restart postgresql
    sudo gitlab-ctl restart sidekiq
    sudo gitlab-ctl restart puma
    

{{< /tab >}}

{{< tab title=”Docker” >}}

  1. 修改 /etc/gitlab/gitlab.rb 以添加以下行:

    postgresql['shared_preload_libraries'] = 'pg_stat_statements'
    
  2. 运行重新配置:

    docker exec -it <container-id> gitlab-ctl reconfigure
    
  3. PostgreSQL 需要重新启动以加载此扩展,这需要极狐GitLab 也重新启动:

    docker exec -it <container-id> gitlab-ctl restart postgresql
    docker exec -it <container-id> gitlab-ctl restart sidekiq
    docker exec -it <container-id> gitlab-ctl restart puma
    

{{< /tab >}}

{{< tab title=”外部 PostgreSQL 服务” >}}

  1. 在您的 postgresql.conf 文件中添加或取消注释以下参数

    shared_preload_libraries = 'pg_stat_statements'
    pg_stat_statements.track = all
    
  2. 重启 PostgreSQL 以使更改生效。

  3. 重启极狐GitLab:网络(Puma)和 Sidekiq 服务应重启。

{{< /tab >}}

{{< /tabs >}}

  1. 数据库控制台运行:

    CREATE EXTENSION pg_stat_statements;
  2. 检查扩展是否正常工作:

    SELECT extname FROM pg_extension WHERE extname = 'pg_stat_statements';
    SELECT * FROM pg_stat_statements LIMIT 10;

检查数据库以去重 CI/CD 标签

{{< history >}}

  • 在极狐GitLab 17.10 中引入。

{{< /history >}}

此 Rake 任务检查 tags 表中的 ci 数据库是否有重复标签。此问题可能会影响经历了长时间多次重大升级的实例。运行以下命令以搜索重复标签,然后重写任何引用重复标签的标签分配,以使用原始标签。

sudo gitlab-rake gitlab:db:deduplicate_tags

要在干运行模式下运行此命令,请设置环境变量 DRY_RUN=true

故障排除

顾问锁连接信息

运行 db:migrate Rake 任务后,您可能会看到类似以下内容的输出:

main: == [advisory_lock_connection] object_id: 173580, pg_backend_pid: 5532
main: == [advisory_lock_connection] object_id: 173580, pg_backend_pid: 5532

返回的消息是信息性的,可以忽略。

执行 gitlab:env:info Rake 任务时的 PostgreSQL 套接字错误

在 Gitaly 或其他非 Rails 节点上运行 sudo gitlab-rake gitlab:env:info 后,您可能会看到以下错误:

PG::ConnectionBad: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/opt/gitlab/postgresql/.s.PGSQL.5432"?

这是因为在多节点环境中,gitlab:env:info Rake 任务应仅在运行 极狐GitLab Rails 的节点上执行。