记一次Gitlab升级, 14.6.0-ee到14.10.0-ee

本文记录了一次从GitLab 14.6.0升级到14.10.0过程中遇到的删除项目问题,升级失败后通过迁移操作解决了数据库错误,最终通过执行特定迁移脚本完成升级并处理了访问权限问题。

升级原因:Gitlab无法删除项目,点删除按钮后项目依然存在,打开后提示“No repository”,(不确定是否这个版本问题,想通过版本升级重装一遍看能否解决问题)

升级过程:

时间:2022-04-27 当前最新版本GitLab Enterprise Edition 14.10.0-ee

1、官方指导说升级到最新版本直接

yum install -y gitlab-ee

Create a GitLab upgrade plan | GitLab

但是,我这儿执行后,提示没有可升级内容Nothing to do ,但是查看我的版本是14.6.0并不是最新版本;

于是按照安装时的步骤,重新添加安装包库

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash

再次yum install -y gitlab-ee 正常升级安装

2、程序运行完成后,Gitlab无法访问,运行日志显示升级过程有错误,信息如下:

Recipe: gitlab::database_migrations
  * ruby_block[check remote PG version] action nothing (skipped due to action :nothing)
  * rails_migration[gitlab-rails] action run
    * bash[migrate gitlab-rails database] action run
 =========================================================================
      Error executing action `run` on resource 'bash[migrate gitlab-rails database]'
 =========================================================================
      Mixlib::ShellOut::ShellCommandFailed
      ------------------------------------
      Command execution failed. STDOUT/STDERR suppressed for sensitive resource
      
      Resource Declaration:
      ---------------------
      suppressed sensitive resource output
      
      Compiled Resource:
      ------------------
      suppressed sensitive resource output
      
      System Info:
      ------------
      chef_version=15.17.4
      platform=centos
      platform_version=7.9.2009
      ruby=ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
      program_name=/opt/gitlab/embedded/bin/chef-client
      executable=/opt/gitlab/embedded/bin/chef-client
  ========================================================================
    Error executing action `run` on resource 'rails_migration[gitlab-rails]'
 =========================================================================
    Mixlib::ShellOut::ShellCommandFailed
    ------------------------------------
    bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Command execution failed. STDOUT/STDERR suppressed for sensitive resource
    
    Resource Declaration:
    ---------------------
    # In /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb
    
     51: rails_migration "gitlab-rails" do
     52:   rake_task 'gitlab:db:configure'
     53:   logfile_prefix 'gitlab-rails-db-migrate'
     54:   helper migration_helper
     55: 
     56:   environment env_variables
     57:   dependent_services dependent_services
     58:   notifies :run, "execute[clear the gitlab-rails cache]", :immediately
     59:   notifies :run, "ruby_block[check remote PG version]", :immediately
     60: 
     61:   only_if { migration_helper.attributes_node['auto_migrate'] }
     62: end
    
    Compiled Resource:
    ------------------
    # Declared in /opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/recipes/database_migrations.rb:51:in `from_file'
    
    rails_migration("gitlab-rails") do
      action [:run]
      default_guard_interpreter :default
      declared_type :rails_migration
      cookbook_name "gitlab"
      recipe_name "database_migrations"
      rake_task "gitlab:db:configure"
      logfile_prefix "gitlab-rails-db-migrate"
      helper "*sensitive value suppressed*"
      environment "*sensitive value suppressed*"
      dependent_services []
      only_if { #code block }
    end
    
    System Info:
    ------------
    chef_version=15.17.4
    platform=centos
    platform_version=7.9.2009
    ruby=ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
    program_name=/opt/gitlab/embedded/bin/chef-client
    executable=/opt/gitlab/embedded/bin/chef-client
    
Recipe: gitlab::gitlab-rails
  * execute[clear the gitlab-rails cache] action run
    - execute /opt/gitlab/bin/gitlab-rake cache:clear
Recipe: gitaly::enable
  * runit_service[gitaly] action hup
    - send hup to runit_service[gitaly]
Recipe: gitlab-kas::enable
  * runit_service[gitlab-kas] action restart (up to date)

Running handlers:
There was an error running gitlab-ctl reconfigure:

rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Command execution failed. STDOUT/STDERR suppressed for sensitive resource


Notes:
Found old initial root password file at /etc/gitlab/initial_root_password and deleted it.

Running handlers complete
Chef Infra Client failed. 56 resources updated in 01 minutes 07 seconds

Notes:
Found old initial root password file at /etc/gitlab/initial_root_password and deleted it.

===
There was an error running gitlab-ctl reconfigure. Please check the output above for more
details.
===
warning: %posttrans(gitlab-ee-14.10.0-ee.0.el7.x86_64) scriptlet failed, exit status 1
Non-fatal POSTTRANS scriptlet failure in rpm package gitlab-ee-14.10.0-ee.0.el7.x86_64
  Verifying  : gitlab-ee-14.10.0-ee.0.el7.x86_64                                                                                                                                                                                                                          1/2 
  Verifying  : gitlab-ee-14.6.0-ee.0.el7.x86_64                                                                                                                                                                                                                           2/2 

Updated:
  gitlab-ee.x86_64 0:14.10.0-ee.0.el7                                                                                                                                                                                                                                         

Complete!

按提示看应该是有迁移过程失败,手动执行迁移命令,并打印详细信息

gitlab-rake db:migrate --trace

会提示出错误原因,我的执行后给出了解决办法:

sudo gitlab-rake gitlab:background_migrations:finalize[ProjectNamespaces::BackfillProjectNamespaces,projects,id,'[null\,"up"]']

然后执行:gitlab-rake db:migrate:status 查看迁移状态,此时都up了,至此升级问题解决完成

3、执行 gitlab-ctl reconfigure 重新配置,配置后无法访问

gitlab-ctl tail 后查看日志502 

/var/opt/gitlab/gitlab-rails/sockets/gitlab.socketconnectconnection refused"

重启后解决

<think> 首先,用户的问题是:“我想查找将docker中的gitlab升级到15.4.6版本的方法 请问如何将docker中的gitlab升级到15.4.6版本”。但是,我需要参考之前的系统级指令和用户提供的引用内容。 回顾系统级指令: - 所有行内数学表达式使用 $...$ 格式(但在这个文本中,似乎没有涉及数学,所以可能不需要)。 - 独立公式使用 $$...$$(同样,可能不相关)。 - LaTeX语法正确(主要是针对数学)。 - 使用中文回答。 - 生成相关问题- 回答中引用的段落末尾添加引用标识,如 [^1]。 用户提供的引用: - 引用[1]:描述从GitLab 12.6.4升级到15.11.7的过程,包括准备工作、升级顺序以及在docker中运行的问题- 引用[2]:讨论Docker中GitLab升级遇到的问题- 引用[3]:提到在GitLab 13.x版本中执行存储迁移命令。 用户的上一个问题似乎是关于GitLab升级的,但在这个对话中,之前的消息是系统级指令的示例。用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次问题和你的回答。”。但是在这个对话流中,用户上一次问题就是当前的这个:“我想查找将docker中的gitlab升级到15.4.6版本的方法”。 所以,我需要回答如何将Docker中的GitLab升级到15.4.6版本。 关键点: - 用户指定了升级到15.4.6版本。 - 参考引用中提到了升级路径:例如,从12.6.4升级需要跨版本升级- GitLab官方推荐升级路径:用户需要遵循版本跳跃的限制。通常,GitLab建议升级到一个大版本内的最新补丁版本,然后跳到下一个大版本。例如,从12到13,13到1414到15。 从引用中提取相关信息: - 引用[1]:提到了从12.6.4升级到15.11.7的步骤,包括升级顺序:12.8.9, 12.10.14, 13.0.14, 13.1.11, 13.5.7, 13.8.8,然后切换到docker等。 - 引用[2]:提到了14.0.12升级14.3.6时遇到的问题,以及监控后台迁移。 - 引用[3]:在13.12.15版本执行存储迁移命令,为升级14.x做准备。 用户想升级到15.4.6,这是一个特定版本。GitLab版本通常遵循Major.Minor.Patch格式。15.4.6是15.x系列的一个补丁版本。 标准升级方法: - 先备份当前GitLab实例。 - 检查当前版本和target版本的升级路径。 - 逐步升级,遵循GitLab的版本跳跃限制。GitLab官方文档建议每次升级不超过一个大版本(即从14.x到15.x是允许的,但从12.x直接到15.x可能不行)。 - 在Docker中升级,通常涉及到拉取新版本的Docker镜像,并运行新容器。 具体步骤: 1. **备份**:必须备份数据库和配置。 2. **检查版本**:用户当前版本是什么?用户没有指定,但从上下文,假设是从某个较低版本升级到15.4.6- 用户提到“docker中的gitlab”,所以当前可能是Docker容器。 - 目标版本是15.4.6。 3. **升级路径**:GitLab版本跳跃限制。官方文档说,不能跳过次要版本。例如,从14.x到15.x需要先升级14.10(或最后一个14.x),然后到15.0或更高。 - 对于15.4.6,用户需要先升级到最近的14.x版本(如14.10.5),然后到15.x。 - 参考引用[1],他们从12.6.4升级需要多个中间版本。 4. **在Docker中升级**: - 使用Docker命令停止当前容器。 - 拉取新版本的GitLab Docker镜像(如gitlab/gitlab-ce:15.4.6-ce.0)。 - 运行新容器,使用相同的卷挂载来保留数据。 5. **迁移步骤**:在升级过程中,可能需要运行特定命令,如引用[3]中的存储迁移命令。 6. **验证**:升级后,验证功能正常。 用户目标是15.4.6GitLab版本:15.4.6是15.4系列的补丁版本。升级路径: - 如果当前版本是14.x,可以直接升级到15.4.6- 如果低于14.x,需要先升级14.x。 假设用户当前版本未知,但基于引用,可能是从较低的版本升级。 生成回答结构: - 用中文回答。 - 结构清晰:逐步解释。 - 引用相关部分:例如,提到备份的重要性,参考引用[1]。 - 结束时生成相关问题。 回答大纲: 1. **准备阶段**: - 备份GitLab数据(数据库和配置文件)。引用[1]提到执行备份操作。 - 验证当前系统状态。 2. **确定升级路径**: - 查看当前GitLab版本。 - GitLab建议升级路径:例如,从14.10.5升级到15.4.6是直接的。如果更低,需要中间版本。 - 参考官方文档或引用中的经验。 3. **升级步骤**: - 在Docker中: - 停止当前容器。 - 拉取新镜像:`docker pull gitlab/gitlab-ce:15.4.6-ce.0`(使用正确的版本标签)。 - 运行新容器,重用volumes。 - 监控升级过程;如果需要,运行迁移命令。 - 例如,引用[2]提到升级后监控后台迁移。 - 引用[3]提到在13.12.15执行存储迁移。 4. **后升级验证**: - 检查日志是否有错误。 - 验证功能,如用户登录、仓库访问。 5. **注意事项**: - 引用[2]提到升级中可能遇到的错误,如后台迁移。 - 确保端口访问正常(引用[1]提到端口22)。 具体到15.4.6- 在Docker中升级GitLab到特定版本,关键是拉取正确镜像和运行容器。 通用命令: - 备份:`docker exec -t gitlab gitlab-backup create` - 停止容器:`docker stop gitlab` - 拉取镜像:`docker pull gitlab/gitlab-ce:15.4.6-ce.0` - 运行新容器:`docker run --detach --name gitlab --restart always --volume gitlab_config:/etc/gitlab --volume gitlab_logs:/var/log/gitlab --volume gitlab_data:/var/opt/gitlab gitlab/gitlab-ce:15.4.6-ce.0` - 然后监控升级日志。 在升级到15.x时,需要注意GitLab 14.x到15.x的breaking changes。官方升级指南应被参考。 添加引用: - 在相关部分末尾添加引用标识,如 [^1] where applicable. 生成相关问题- 指令要求生成相关问题,放在最后。 最终回答结构: - 介绍:概述升级过程。 - 详细步骤:分步骤解释。 - 引用:在适当地方添加引用标- 相关问题:以 §§相关问题§§ 开头。 相关问题 ideas: 1. 如何备份GitLab数据在Docker环境中? 2. 版本跳跃限制的具体规则是什么? 3. 升级GitLab 15.4.6后如何验证功能? 4. 如果在升级过程中遇到错误如何解决? </think> ### Docker中GitLab升级到15.4.6版本的方法 升级GitLab Docker容器到特定版本(如15.4.6)需要遵循GitLab官方的版本跳跃限制和升级路径,以确保数据迁移和系统稳定性。GitLab不支持直接跨越大版本升级(例如从12.x直接跳到15.x),必须先逐步升级到中间版本。以下基于GitLab官方文档和参考引用中的经验[^1][^2][^3],我将分步解释升级过程。假设您当前GitLab版本低于15.x(如14.x或更早),目标是将Docker容器中的GitLab升级到 **15.4.6-ce.0**(社区版)。全程操作需在备份后进行,并确保Docker环境正常。 #### 1. **准备工作:备份和验证当前状态** - **备份GitLab数据**:升级前必须备份数据库、配置和仓库数据。使用Docker命令执行备份: ```bash # 进入GitLab容器执行备份命令 docker exec -t <container_name> gitlab-backup create # 备份配置文件(存储在宿主机volume中) cp -r /path/to/gitlab_config /path/to/backup_gitlab_config ``` 备份完成后,验证备份文件完整性。参考引用[1]强调备份是升级前的关键步骤,以防止数据丢失[^1]。 - **验证当前版本和系统状态**: - 查看当前GitLab版本:`docker exec -t <container_name> gitlab-rake gitlab:env:info | grep 'Version:'` - 确保GitLab功能正常:登录Web界面、克隆仓库、推送代码等(引用[1]中的验证项)[^1]。 - 检查Docker卷挂载:确保`gitlab_config`、`gitlab_data`和`gitlab_logs`等volume路径正确且可访问。 #### 2. **确定升级路径和顺序** - GitLab官方要求:升级路径不能跳过次要版本。例如: - 如果当前是 **14.x**:可直接升级到 **15.4.6**。 - 如果当前是 **13.x 或更低**(如12.x):需先升级到 **14.10.5**(14.x的最后一个版本),再升级到 **15.4.6**。 - 基于引用[1]和[3]的经验: - 从低版本升级时,需按顺序升级(如13.8.8 → 13.12.15 → 14.x → 15.x)。 -升级14.x前,如果当前版本是13.12.15,需先执行存储迁移命令(引用[3])[^3]: ```bash docker exec -t <container_name> gitlab-rake gitlab:storage:migrate_to_hashed ``` 这步避免升级后数据不一致错误。 - **关键检查**:确认您的当前版本。如果未知,假设需从14.x升级到15.4.6(直接路径)。否则,参考 [GitLab官方升级路径文档](https://docs.gitlab.com/ee/update/index.html#upgrade-paths) 确定中间版本。 #### 3. **升级操作步骤(以当前为14.x为例)** 以下步骤假设您已通过Docker运行GitLab,并使用volume持久化数据。升级目标是 **gitlab/gitlab-ce:15.4.6-ce.0** 镜像。 **步骤1: 升级14.10.5(如果当前低于14.x)** - 如果当前版本低于14.x(如13.12.15),先升级14.10.5: ```bash # 停止当前容器 docker stop <container_name> # 拉取14.10.5镜像 docker pull gitlab/gitlab-ce:14.10.5-ce.0 # 运行新容器,重用原有volume docker run --detach \ --name gitlab-14.10.5 \ --restart always \ --volume gitlab_config:/etc/gitlab \ --volume gitlab_logs:/var/log/gitlab \ --volume gitlab_data:/var/opt/gitlab \ gitlab/gitlab-ce:14.10.5-ce.0 ``` - 等待容器启动(约10-30分钟),监视日志:`docker logs -f gitlab-14.10.5`。 - 验证升级:访问Web界面,确保无错误。引用[2]提到升级后需监控“监控-后台迁移”任务是否完成[^2]。 **步骤2: 升级到15.4.6** -14.10.5升级到15.4.6: ```bash # 停止14.x容器 docker stop gitlab-14.10.5 # 拉取15.4.6镜像 docker pull gitlab/gitlab-ce:15.4.6-ce.0 # 运行新容器(使用相同volume) docker run --detach \ --name gitlab-15.4.6 \ --restart always \ --volume gitlab_config:/etc/gitlab \ --volume gitlab_logs:/var/log/gitlab \ --volume gitlab_data:/var/opt/gitlab \ gitlab/gitlab-ce:15.4.6-ce.0 ``` - **监控升级过程**: - 启动后,GitLab自动运行数据库迁移。监视日志:`docker logs -f gitlab-15.4.6`。 - 如果日志出现错误(如引用[2]中的后台迁移问题),等待所有迁移任务完成(约30-60分钟)[^2]。 - **常见问题处理**: - 如果遇到“413 Request Entity Too Large”错误(引用[1]),需调整GitLab配置:在`/etc/gitlab/gitlab.rb`中添加 `nginx['client_max_body_size'] = '1024m'`,并重启容器[^1]。 - 如果Webhooks或邮件功能失效(引用[1]),检查配置volume是否兼容新版本,并重启服务。 **步骤3: 后升级验证** - 访问GitLab Web界面(http://localhost:80),验证: - 用户登录正常。 - 仓库项目列表和合并请求可操作。 - CI/CD流水线运行无错误(如引用[1]中的artifacts上传问题)[^1]。 - 运行健康检查:`docker exec -t gitlab-15.4.6 gitlab-rake gitlab:check`。 #### 4. **注意事项和最佳实践** - **版本兼容性**:确保Docker主机满足GitLab 15.4.6的要求(如Docker Engine ≥ 20.10, 内存 ≥ 4GB)。引用[1]提到切换到Docker部署时需验证端口访问(如端口22)[^1]。 - **错误处理**: - 如果升级失败,使用备份恢复:`docker exec -t gitlab-15.4.6 gitlab-backup restore BACKUP=<backup_id>`。 - 引用[2]强调升级后检查“监控-后台迁移”页面,确保无pending任务[^2]。 - **性能优化**:升级期间增加容器资源(CPU/内存)以加速迁移。避免在生产高峰期操作。 - **推荐工具**:使用Docker Compose管理升级(引用[1]),简化容器生命周期控制[^1]。 #### 5. **附加资源** - 官方文档:[GitLab Upgrade Guide](https://docs.gitlab.com/ee/update/index.html) - Docker镜像库:[gitlab/gitlab-ce tags](https://hub.docker.com/r/gitlab/gitlab-ce/tags)(搜索15.4.6-ce.0) 通过以上步骤,您可以在Docker环境中安全升级GitLab 15.4.6。如果在特定版本跳跃(如从13.x开始)遇到问题,提供当前版本细节可进一步优化路径。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值