Gitlab 升级、数据迁移

由于用的Gitlab版本比较旧了,计划升级并迁移到新的服务器。
从11.7.0 升级到 16.4.1 版本。

一、升级

1.1 确定升级路径

Gitlab升级是不能跨大版本升级的,根据官方升级路径来操作。
我是通过docker安装的Gitlab,所以只列出了docker的升级方式。

官方链接:https://docs.gitlab.com/ee/update/index.html#upgrade-paths

升级路径页面
进去之后配置好目前版本、目标版本,就会给出具体的升级路径。以下是我的升级路径
具体升级路径

1.2 升级前后检查

每次升级前后都要做的检查,以保证系统正常运行:

# 状态检查
gitlab-rake gitlab:check
# 数据加密检查
gitlab-rake gitlab:doctor:secrets

查看Gitlab UI:
能否登录、能否显示项目列表、能否拉取,提交代码等。

版本检查:
检查Gitlab版本

1.3 备份

GitLab 12.2 或更高版本:

docker exec -t <container name> gitlab-backup create

需要注意的是,该命令只是备份了数据, 配置文件、ssl证书等内容是没有备份的,需要手动备份。
备份文件命名一般是时间戳+_gitlab_backup.tar
路径在backups里面

]# ls /home/git/data/backups/
1697632970_2023_10_18_16.1.5_gitlab_backup.tar

1.4 升级

# 按照顺序升级,升级之后记得检查。
docker run gitlab/gitlab-ce:11.11.8-ce.0
docker run gitlab/gitlab-ce:12.0.12-ce.0
docker run gitlab/gitlab-ce:12.1.17-ce.0
...
docker run gitlab/gitlab-ce:16.4.1-ce.0
docker run gitlab/gitlab-ce:15.4.6-ce.0

日志查看

docker logs -f --tail 100 git_web
docker compose logs --tail=100 -f # 需要在docker-compose.yml同一级目录里面执行

二、数据迁移

只能将备份还原到与创建备份时完全相同的 GitLab 版本和类型 (CE/EE)
新服务器安装好Gitlab之后,按照下面的顺序执行命令

# Stop the processes that are connected to the database
# docker exec -it <name of container> gitlab-ctl stop puma
docker exec -it git_web gitlab-ctl stop puma
#docker exec -it <name of container> gitlab-ctl stop sidekiq
docker exec -it git_web gitlab-ctl stop sidekiq

# Verify that the processes are all down before continuing
# docker exec -it <name of container> gitlab-ctl status
 docker exec -it git_web  gitlab-ctl status

# Run the restore. NOTE: "_gitlab_backup.tar" is omitted from the name
# docker exec -it <name of container> gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
docker exec -it git_web   gitlab-backup restore BACKUP=1697632970_2023_10_18_16.1.5

# Restart the GitLab container
# docker restart <name of container>
docker restart git_web   

# Check GitLab
# docker exec -it <name of container> gitlab-rake gitlab:check SANITIZE=true
docker exec -it git_web  gitlab-rake gitlab:check SANITIZE=true

数据恢复之后,访问git,报错 网站启用了 HSTS,不能访问,重新更新了一下ssl证书可以正常访问了。

三、排错

  1. 在 15.4.6 升级到 15.11.13 的时候报错:
[2023-10-17T04:35:35+00:00] ERROR: Running exception handlers
There was an error running gitlab-ctl reconfigure:
gitlab_rails['smtp_tls'] and gitlab_rails['smtp_enable_starttls_auto'] are mutually exclusive. Set one of them to false. SMTP providers usually use port 465 for TLS and port 587 for STARTTLS.
Running handlers complete
[2023-10-17T04:35:35+00:00] ERROR: Exception handlers complete
Infra Phase failed. 0 resources updated in 06 seconds
[2023-10-17T04:35:35+00:00] FATAL: Stacktrace dumped to /opt/gitlab/embedded/cookbooks/cache/cinc-stacktrace.out
[2023-10-17T04:35:35+00:00] FATAL: ---------------------------------------------------------------------------------------
[2023-10-17T04:35:35+00:00] FATAL: PLEASE PROVIDE THE CONTENTS OF THE stacktrace.out FILE (above) IF YOU FILE A BUG REPORT
[2023-10-17T04:35:35+00:00] FATAL: ---------------------------------------------------------------------------------------
[2023-10-17T04:35:35+00:00] FATAL: RuntimeError: gitlab_rails['smtp_tls'] and gitlab_rails['smtp_enable_starttls_auto'] are mutually exclusive. Set one of them to false. SMTP providers usually use port 465 for TLS and port 587 for STARTTLS. 

大概意思是在 gitlab.rb 的 SMTP 配置中,smtp_tlssmtp_enable_starttls_auto 这两个选项不能同时启用。
smtp_tls: 是否使用 TLS 加密SMTP连接。
smtp_enable_starttls_auto: 是否自动使用 STARTTLS命令启用TLS加密。

解决办法
将其中一个的值改为 false 后重新部署即可。

  1. Deploy in progress
    部署之后需要些时间,等几分钟再访问试试看。
    在这里插入图片描述
  2. can’t create Thread: Operation not permitted
    详细报错信息:
[2023-10-17T09:01:03+00:00] INFO: Loading cookbooks [gitlab@0.0.1, package@0.1.0, logrotate@0.1.0, postgresql@0.1.0, redis@0.1.0, monitoring@0.1.0, registry@0.1.0, mattermost@0.1.0, consul@0.1.0, gitaly@0.1.0, praefect@0.1.0, gitlab-kas@0.1.0, gitlab-pages@0.1.0, letsencrypt@0.1.0, nginx@0.1.0, runit@5.1.7, acme@4.1.6, crond@0.1.0]
Synchronizing cookbooks:

  ================================================================================
  Error Syncing Cookbooks:
  ================================================================================

  Unexpected Error:
  -----------------
  ThreadError: can't create Thread: Operation not permitted

  System Info:
  ------------
  chef_version=17.10.0
  platform=ubuntu
  platform_version=22.04
  ruby=ruby 3.0.6p216 (2023-03-30 revision 23a532679b) [x86_64-linux]
  program_name=/opt/gitlab/embedded/bin/cinc-client
  executable=/opt/gitlab/embedded/bin/cinc-client


  Running handlers:
[2023-10-17T09:01:03+00:00] ERROR: Running exception handlers
There was an error running gitlab-ctl reconfigure:

can't create Thread: Operation not permitted

[2023-10-17T09:01:03+00:00] ERROR: Report handler GitLabHandler::Exception raised #<NameError: uninitialized constant GitLabHandler::Exception::OmnibusHelper>
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/cookbooks/package/libraries/handlers/gitlab.rb:30:in `report'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/handler.rb:296:in `run_report_unsafe'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/handler.rb:284:in `run_report_safely'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/handler.rb:155:in `block in run_exception_handlers'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/handler.rb:153:in `each'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/handler.rb:153:in `run_exception_handlers'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/handler.rb:164:in `block in <class:Handler>'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/client.rb:443:in `block in run_failed'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/client.rb:442:in `each'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/client.rb:442:in `run_failed'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/client.rb:306:in `rescue in run'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/client.rb:299:in `run'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/application.rb:305:in `run_with_graceful_exit_option'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/application.rb:281:in `block in run_chef_client'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/local_mode.rb:42:in `with_server_connectivity'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/application.rb:264:in `run_chef_client'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/application/base.rb:352:in `run_application'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-17.10.0/lib/chef/application.rb:67:in `run'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/lib/ruby/gems/3.0.0/gems/chef-bin-17.10.0/bin/cinc-client:25:in `<top (required)>'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/bin/cinc-client:25:in `load'
[2023-10-17T09:01:03+00:00] ERROR: /opt/gitlab/embedded/bin/cinc-client:25:in `<main>'
  Running handlers complete
[2023-10-17T09:01:03+00:00] ERROR: Exception handlers complete
  Infra Phase failed. 0 resources updated in 01 seconds
[2023-10-17T09:01:03+00:00] FATAL: Stacktrace dumped to /opt/gitlab/embedded/cookbooks/cache/cinc-stacktrace.out
[2023-10-17T09:01:03+00:00] FATAL: ---------------------------------------------------------------------------------------
[2023-10-17T09:01:03+00:00] FATAL: PLEASE PROVIDE THE CONTENTS OF THE stacktrace.out FILE (above) IF YOU FILE A BUG REPORT
[2023-10-17T09:01:03+00:00] FATAL: ---------------------------------------------------------------------------------------
[2023-10-17T09:01:03+00:00] FATAL: ThreadError: can't create Thread: Operation not permitted

官方回复:

# 链接:https://docs.gitlab.com/ee/install/docker.html#threaderror-cant-create-thread-operation-not-permitted

This error occurs when running a container built with newer versions on a host that doesn’t have support for the new clone3 function. In GitLab 16.0 and later, the container image includes the Ubuntu 22.04 Linux package which is built with this newer .glibcglibc

This problem is fixed with newer container runtime tools like Docker 20.10.10.

To resolve this issue, update Docker to version 20.10.10 or later.

解决方案:升级docker到 20.10.10 或者更高级版本即可。

  1. 恢复数据的时候报错
2023-10-19 15:47:50 +0800 -- Unpacking backup ...
tar: 1697701149_2023_10_19_16.1.5_gitlab_backup.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
2023-10-19 15:47:50 +0800 -- Unpacking backup failed
2023-10-19 15:47:50 +0800 -- Deleting backup and restore PID file ... done

解决方案:权限不足导致的,进入容器修改权限就可以了

$ docker exec -it git_web bash

# cd /var/opt/gitlab/backups
# ll -h
-rw-------  1 root root 1.7G Oct 19 07:45 1697701149_2023_10_19_16.1.5_gitlab_backup.tar

# chown git:git 1697701149_2023_10_19_16.1.5_gitlab_backup.tar
# ll
-rw-------  1 git  git  1743431680 Oct 19 07:45 1697701149_2023_10_19_16.1.5_gitlab_backup.tar
GitLab 数据迁移通常涉及从一个服务器迁移到另一个服务器,或是升级 GitLab 版本时的数据同步。以下是详细的步骤说明: --- ### 步骤一:准备目标环境 1. **安装同版本的 GitLab**: 确保目标机器上安装了与当前 GitLab 相同或更高版本的软件。 - 如果需要升级,请参考 [GitLab 升级指南](https://docs.gitlab.com/ee/update/)。 2. **检查依赖项**: 安装所有必要的依赖包 (如 PostgreSQL、Redis) 并确保其兼容性。 --- ### 步骤二:导出数据 在现有的 GitLab 实例中生成备份文件: ```bash gitlab-rake gitlab:backup:create ``` 该命令会在默认路径 `/var/opt/gitlab/backups/` 下创建一个压缩备份文件,例如 `1670958334_2023_01_14_gitlab_backup.tar`。 > 注意:如果启用了对象存储(AWS S3等),还需手动复制存储桶中的内容到新环境中。 --- ### 步骤三:传输备份文件 通过 SCP 或其他安全方式将刚才生成的 `.tar` 文件传送到新的主机上: ```bash scp /var/opt/gitlab/backups/<BACKUP_FILE>.tar user@new-server:/tmp/ ``` 同时别忘了携带额外资料比如自定义主题 CSS 和 SSH 密钥等内容。 --- ### 步骤四:恢复数据 登录至接收端服务器并执行导入流程: ```bash cp /tmp/<BACKUP_FILE>.tar /var/opt/gitlab/backups/ chown git:git /var/opt/gitlab/backups/<BACKUP_FILE>.tar sudo gitlab-rake gitlab:backup:restore BACKUP=<TIMESTAMP> ``` 这里 `<TIMESTAMP>` 应替换为实际时间戳部分字符串。 完成后重启整个服务链保证更改生效: ```bash gitlab-ctl reconfigure && gitlab-ctl restart ``` 最后访问前端界面验证全部组件运作良好与否即可完成整个过程。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值