将 docker 部署的 gitlab 从 14.1.0 升级到 15.0.0(解决14.10.0升级报错)

服务器原有使用 docker 部署的 gitlab,
需要将其从版本 14.1.0 升级到 15.0.0,
升级过程中还需要解决升级14.10.0版本的报错问题。

  1. # 原 yml 文件
  2. # docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  3. # https://docs.docker.com/compose/compose-file/compose-versioning/
  4. # https://github.com/compose-spec/compose-spec/blob/master/spec.md
  5. # Compose file format 3.8, Docker Engine release 19.03.0+
  6. version: "3.8"
  7. services:
  8. gitlab:
  9. image: gitlab/gitlab-ce:14.1.0-ce.0
  10. networks:
  11. - default
  12. volumes:
  13. - "/data/config/Shanghai:/etc/localtime"
  14. - "/data/gitlab/config:/etc/gitlab"
  15. - "/data/gitlab/data:/var/opt/gitlab"
  16. - "/data/gitlab/logs:/var/log/gitlab"
  17. deploy:
  18. labels:
  19. host: your-swarm-host
  20. replicas: 1
  21. restart_policy:
  22. condition: on-failure
  23. networks:
  24. default:
  25. external: true
  26. name: your-swarm-net
  1. # 备份 gitlab 配置文件
  2. cd /data/gitlab
  3. tar -czvf gitlab-config-20220524.tar.gz config
  4. # 备份 gitlab 数据
  5. DOCKER_ID=`docker ps | grep gitlab | awk '{print $1}'`
  6. docker exec -it ${DOCKER_ID} gitlab-rake gitlab:backup:create
  7. # 升级 14.1.0 > latest
  8. # 获取最新镜像 gitlab/gitlab-ce:latest
  9. sed -i 's/14.1.0-ce.0/latest/g' /data/gitlab/gitlab.yml
  10. docker pull gitlab/gitlab-ce:latest
  11. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  12. docker service logs -f arno_gitlab
  13. docker service ls
  14. # 升级完成后为 4.6.1 的版本
  15. # 再按照如下顺序逐步升级
  16. # 过程中可能需要重新启动 nginx 容器
  17. # 再升级为 14.8.0
  18. sed -i 's/latest/14.8.0-ce.0/g' /data/gitlab/gitlab.yml
  19. docker pull gitlab/gitlab-ce:14.8.0-ce.0
  20. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  21. # 再升级为 14.9.0
  22. sed -i 's/14.8.0/14.9.0/g' /data/gitlab/gitlab.yml
  23. docker pull gitlab/gitlab-ce:14.9.0-ce.0
  24. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  25. # 再升级为 14.9.4
  26. sed -i 's/14.9.0/14.9.4/g' /data/gitlab/gitlab.yml
  27. docker pull gitlab/gitlab-ce:14.9.4-ce.0
  28. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno

直接升级会报错:

  1. Running handlers:
  2. There was an error running gitlab-ctl reconfigure:
  3. rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database]
  4. (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16)
  5. had an error: Mixlib::ShellOut::ShellCommandFailed: Command execution failed. STDOUT/STDERR suppressed for sensitive resource Running handlers complete Chef Infra Client failed. 161 resources updated in 01 minutes 44 seconds

参考如下文章:

  1. # 再升级为 14.10.0
  2. docker service rm arno_gitlab
  3. # 修改 /data/gitlab/config/gitlab.rb
  4. # 在 # gitlab_rails['auto_migrate'] = true 下面增加: gitlab_rails['auto_migrate'] = false
  5. # 增加一个空文件 /data/gitlab/config/skip-auto-reconfigure
  6. sed -i 's/14.9.4/14.10.0/g' /data/gitlab/gitlab.yml
  7. docker pull gitlab/gitlab-ce:14.10.0-ce.0
  8. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  9. # 等待 3分钟左右待gitlab容器启动
  10. docker service ls
  11. DOCKER_ID=`docker ps | grep gitlab | awk '{print $1}'`
  12. docker exec -it ${DOCKER_ID} /bin/bash
  13. # 手动升级
  14. gitlab-rake db:migrate
  15. gitlab-rake gitlab:background_migrations:finalize[ProjectNamespaces::BackfillProjectNamespaces,projects,id,'[null\,"up"]']
  16. gitlab-rake db:migrate
  17. gitlab-rake db:migrate:status
  18. # 出行 gitlab Reconfigured! 提示
  19. # 确认所有升级项全部是 up 状态后
  20. gitlab-ctl reconfigure
  21. # 退出容器
  22. docker service rm arno_gitlab
  23. # 修改 /data/gitlab/config/gitlab.rb
  24. # 去掉 gitlab_rails['auto_migrate'] = false
  25. # 删除 空文件 /data/gitlab/config/skip-auto-reconfigure
  26. # 便于后续自动升级
  27. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  28. # 再升级为 15.0.0
  29. sed -i 's/14.10.0/15.0.0/g' /data/gitlab/gitlab.yml
  30. docker pull gitlab/gitlab-ce:15.0.0-ce.0
  31. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  32. # 再升级为 15.0.0
  33. sed -i 's/14.10.0/15.0.0/g' /data/gitlab/gitlab.yml
  34. docker pull gitlab/gitlab-ce:15.0.0-ce.0
  35. docker stack deploy --with-registry-auth -c /data/gitlab/gitlab.yml arno
  36. # 删除多余的docker gitlab镜像文件
  37. docker rmi bb81563932ce b6d52c0ee5cf 6de118597222 50a2f66dea2b 47e6c191a128 467b0e5b3fe1 46cd6954564a

 欢迎访问我的博客 原文 将 docker 部署的 gitlab 从 14.1.0 升级到 15.0.0(解决14.10.0升级报错) - 天天成长