极狐 GitLab

维护命令

Tier: 基础版,专业版,旗舰版

Offering: 私有化部署

安装后可以运行以下命令。

获取服务状态#

运行 sudo gitlab-ctl status 查看每个极狐GitLab 组件的当前状态和运行时间。

输出类似于以下内容:

plaintext
run: nginx: (pid 972) 7s; run: log: (pid 971) 7s run: postgresql: (pid 962) 7s; run: log: (pid 959) 7s run: redis: (pid 964) 7s; run: log: (pid 963) 7s run: sidekiq: (pid 967) 7s; run: log: (pid 966) 7s run: puma: (pid 961) 7s; run: log: (pid 960) 7s

作为演示,上例中的第一行可以解释如下:

  • Nginx 是进程名称。
  • 972 是进程标识符。
  • NGINX 已运行 7 秒(7s)。
  • log 表示附加到前一个进程的 svlogd 日志记录进程。
  • 971 是日志记录进程的进程标识符。
  • 日志记录进程已运行 7 秒(7s)。

显示配置#

运行 sudo gitlab-ctl show-config 显示将由 gitlab-ctl reconfigure 生成的配置。输出为 JSON 格式,类似于以下内容:

json
1{ 2 "gitlab": { 3 "gitlab_sshd": { 4 5 }, 6 "gitlab_shell": { 7 "secret_token": "<SECRET_TOKEN>", 8 "auth_file": "/var/opt/gitlab/.ssh/authorized_keys" 9 }, 10 "gitlab_rails": { 11 "smtp_address": "smtp.example.com", 12 "smtp_port": 587, 13 "smtp_user_name": "user@example.com", 14 "smtp_password": "<SMTP_PASSWORD>", 15 "smtp_domain": "smtp.example.com", 16 "smtp_authentication": "login", 17 "monitoring_whitelist": [ 18 "127.0.0.0/8", 19 "::1/128", 20 ], 21 ... 22 } 23 } 24}

极狐GitLab 重新配置后,您可以查看 /var/opt/gitlab 目录下对应服务的自动生成的 YAML 配置文件,以检查最新应用的配置。在上面的示例中,您可以检查 gitlab-rails 在 /var/opt/gitlab/gitlab-rails/etc/gitlab.yml 下的配置。

跟踪进程日志#

请参阅 Linux 软件包安装的日志。

启动和停止#

Linux 软件包安装并配置后,您的服务器会有一个 runit 服务目录(runsvdir)进程在运行,该进程通过 /etc/inittab 或 /etc/init/gitlab-runsvdir.conf Upstart 资源在启动时启动。您不应直接处理 runsvdir 进程;您可以使用 gitlab-ctl 前端来代替。

您可以使用以下命令启动、停止或重启极狐GitLab 及其所有组件。

shell
1# Start all GitLab components 2sudo gitlab-ctl start 3 4# Stop all GitLab components 5sudo gitlab-ctl stop 6 7# Restart all GitLab components 8sudo gitlab-ctl restart 9 10# Restart all GitLab components except given services ... (e.g. gitaly, redis) 11sudo gitlab-ctl restart-except gitaly redis

请注意,在单核服务器上,重启 Puma 和 Sidekiq 可能需要长达一分钟。在 Puma 重新启动之前,您的极狐GitLab 实例将返回 502 错误。

也可以启动、停止或重启单个组件。

shell
sudo gitlab-ctl restart sidekiq

Puma 支持几乎零停机重载。可以通过以下方式触发:

shell
sudo gitlab-ctl hup puma

您必须等待 hup 命令完成。这可能需要一些时间。在完成之前,请将该节点从池中移除,并且不要重启调用此命令的节点上的服务。您也不能使用 Puma 重载来更新 Ruby 运行时。

Puma 有以下信号来控制应用程序行为:

信号Puma
HUP重新打开定义的日志文件,或停止进程以强制重启
INT优雅地停止请求处理
USR1分阶段重启 worker,滚动重启,不重新加载配置
USR2重启 worker 并重新加载配置
QUIT退出主进程

对于 Puma,gitlab-ctl hup puma 将发送一系列 SIGINT 和 SIGTERM(如果进程未重启)信号。Puma 在收到 SIGINT 后立即停止接受新连接。它完成所有正在运行的请求。然后 runit 重启该服务。

调用 Rake 任务#

要调用极狐GitLab Rake 任务,请使用 gitlab-rake。例如:

shell
sudo gitlab-rake gitlab:check

如果您是 git 用户,请省略 sudo。

与传统的极狐GitLab 安装不同,无需更改用户或 RAILS_ENV 环境变量;这由 gitlab-rake 包装脚本处理。

启动 Rails 控制台会话#

有关更多信息,请参阅 Rails 控制台。

启动 PostgreSQL 超级用户 psql 会话#

如果您需要对捆绑的 PostgreSQL 服务具有超级用户访问权限,可以使用 gitlab-psql 命令。它接受与常规 psql 命令相同的参数。

shell
# Superuser psql access to GitLab's database sudo gitlab-psql -d gitlabhq_production

这仅在您至少运行过一次 gitlab-ctl reconfigure 后才有效。gitlab-psql 命令不能用于连接到远程 PostgreSQL 服务器,也不能用于连接到本地非 Linux 软件包 PostgreSQL 服务器。

在 Geo 跟踪数据库中启动 PostgreSQL 超级用户 psql 会话#

与前面的命令类似,如果您需要对捆绑的 Geo 跟踪数据库(geo-postgresql)具有超级用户访问权限,可以使用 gitlab-geo-psql。它接受与常规 psql 命令相同的参数。对于 HA,请参阅 检查配置 中有关必要参数的更多信息。

shell
# Superuser psql access to GitLab's Geo tracking database sudo gitlab-geo-psql -d gitlabhq_geo_production

容器镜像仓库垃圾回收#

容器镜像仓库会占用大量磁盘空间。为清理未使用的层,仓库包含一个 垃圾回收命令。

限制用户登录极狐GitLab#

如果您需要临时限制用户登录极狐GitLab,可以使用 sudo gitlab-ctl deploy-page up。当用户访问您的极狐GitLab URL 时,他们将看到一个任意的 Deploy in progress 页面。

要移除该页面,只需运行 sudo gitlab-ctl deploy-page down。您还可以使用 sudo gitlab-ctl deploy-page status 检查部署页面的状态。

附带说明,如果您想限制登录极狐GitLab 并限制对项目的更改, 您可以 将项目设置为只读, 然后显示 Deploy in progress 页面。

轮换密钥文件#

如果出于安全目的需要,您可以轮换 /etc/gitlab/gitlab-secrets.json 密钥文件。在此文件中:

  • 不要轮换 gitlab_rails 密钥,因为它包含数据库加密密钥。如果轮换此密钥,您将看到与 密钥文件丢失时相同的行为。
  • 您可以轮换所有其他密钥。

如果您的极狐GitLab 环境中有多个节点,请选择一个 Rails 节点来执行初始步骤。

要轮换密钥:

  1. 验证数据库值能否解密,并记录显示的任何解密错误,或在继续操作前解决这些错误。

  2. 推荐。提取您当前的 gitlab_rails 密钥,包括完整的数组值。 保存输出,因为稍后需要用到:

    shell
    sudo /opt/gitlab/embedded/bin/ruby -rjson -e ' secrets = JSON.parse(File.read("/etc/gitlab/gitlab-secrets.json")) puts JSON.pretty_generate(secrets.fetch("gitlab_rails")) '
  3. 将您当前的密钥文件移动到其他位置:

    shell
    sudo mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.old
  4. 重新配置极狐GitLab。极狐GitLab 随后会生成一个新的 /etc/gitlab/gitlab-secrets.json 文件,其中包含新的密钥值。

  5. 如果您已提取了 gitlab_rails 之前的密钥,请编辑新的 /etc/gitlab/gitlab-secrets.json 文件。 将整个 gitlab_rails 对象(包括其花括号)替换为保存的输出。

  6. 再次重新配置极狐GitLab, 以使对密钥文件所做的更改生效。

  7. 重启极狐GitLab,以确保所有服务 都在使用新的密钥。

  8. 如果您的极狐GitLab 环境中有多个节点,则必须将密钥复制到所有其他节点:

    1. 在所有其他节点上,将当前的密钥文件移动到其他位置:

      shell
      sudo mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.old
    2. 将新的 /etc/gitlab/gitlab-secrets.json 文件从您的 Rails 节点复制到所有其他极狐GitLab 节点。

    3. 在所有其他节点上,重新配置极狐GitLab 在每个节点上进行。

    4. 在所有其他节点上,重启极狐GitLab 在每个 节点上进行,以确保所有服务都使用新的密钥。

    5. 在所有节点上,对 /etc/gitlab/gitlab-secrets.json 文件运行校验和匹配,以确认密钥匹配:

      shell
      sudo md5sum /etc/gitlab/gitlab-secrets.json
  9. 验证数据库值可以使用当前密钥解密。输出应与之前的执行结果匹配。

  10. 确认极狐GitLab 按预期工作。如果是,则可以安全地删除旧的密钥。

为 gitlab-ctl 启用 bash 补全#

Linux 软件包包含一个用于 gitlab-ctl 命令的 bash 补全脚本。要启用它,请在您的 shell 配置文件中加载该补全脚本。

补全脚本位于 /opt/gitlab/embedded/share/bash-completion/completions/gitlab-ctl-bash-completion。

要启用 bash 补全:

  1. 将以下行添加到您的 shell 配置文件(.bashrc、.bash_profile 或等效文件)中:

    shell
    source /opt/gitlab/embedded/share/bash-completion/completions/gitlab-ctl-bash-completion
  2. 重新加载您的 shell 配置:

    shell
    source ~/.bashrc

启用后,您可以将 Tab 补全与 gitlab-ctl 命令一起使用:

shell
gitlab-ctl <TAB>

补全脚本要求您的系统上安装了 bash-completion 软件包。如果尚未安装,您可以使用系统的软件包管理器进行安装:

  • Debian/Ubuntu:sudo apt-get install bash-completion
  • RHEL/CentOS:sudo yum install bash-completion

弃用#

运行 sudo gitlab-ctl check-config 检查您的 Omnibus 配置中是否有将在未来极狐GitLab 版本中移除的标志。

该命令支持以下参数:

  • --version <Version>:您要检查配置的目标极狐GitLab 版本。
  • --no-fail:即使发现任何弃用/移除项,也不以失败代码退出。

当您升级极狐GitLab 时,此配置检查会自动运行。如果您希望在升级期间跳过此检查,请在 /etc/gitlab/skip-fail-config-check 创建一个文件。