gitlab升级后问题 (支持golang私有仓和兼容多域名拉取)


简述

​ 公司gitlab比较老,版本是v10.0.0,计划升级到v14.10.0。记录升级过程,保留多域名和ip地址访问,增加golang 私有仓支持。

gitlab版本升级

1.1.升级路径

官网参考

10.0.0-> 10.8.7 -> 11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.15 -> 14.0.12 ->14.0.12 ->14.9.0
1.2配置镜像源
cat > <<EOF
[gitlab-ce]
name=gitlab-ce
baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=https://packages.gitlab.com/gpg.key
EOF
yum makecache
1.3 备份

备份时需要保持gitlab处于正常运行状态,通过执行gitlab-rake gitlab:backup:create进行备份 默认备份文件会存在在/var/opt/gitlab/backups目录下,备份的文件是个tar包,包含了GitLab的所有数据(账户、仓库等) 1652090037_2022_05_09_10.0.0_gitlab_backup.tar 同时需要手动备份 /etc/gitlab/gitlab-secrets.json,/etc/gitlab/gitlab.rb

gitlab-rake gitlab:backup:create
cp /etc/gitlab/{gitlab-secrets.json,gitlab.rb} /var/opt/gitlab/backups/
1.4 逐步升级各个版本

​ 注意升级每个版本查看一下

yum search gitlab --show-duplicates

yum install -y gitlab-ce-10.8.7
gitlab-ctl reconfigure
gitlab-ctl restart

yum install -y gitlab-ce-11.11.8
gitlab-ctl reconfigure
gitlab-ctl restart

yum install -y gitlab-ce-12.0.12
gitlab-ctl reconfigure
gitlab-ctl restart


yum install -y gitlab-ce-12.1.17
gitlab-ctl reconfigure
gitlab-ctl restart

yum install -y gitlab-ce-12.10.14
gitlab-ctl reconfigure
gitlab-ctl restart

yum install -y gitlab-ce-13.0.14
gitlab-ctl reconfigure
gitlab-ctl restart

yum install -y gitlab-ce-13.1.11
gitlab-ctl reconfigure
gitlab-ctl restart


yum install -y gitlab-ce-13.8.8
gitlab-ctl reconfigure
gitlab-ctl restart


yum install -y gitlab-ce-13.12.15
gitlab-ctl reconfigure
gitlab-ctl restart

yum install -y gitlab-ce-14.0.12
gitlab-ctl reconfigure
gitlab-ctl restart


yum install -y gitlab-ce-14.6.2
gitlab-ctl reconfigure
gitlab-ctl restart


yum install -y gitlab-ce-14.9.0
gitlab-ctl reconfigure
gitlab-ctl restart
1.5 备份还原

将备份文件放到新gitlab服务器的 /var/opt/gitlab/backups下,并给文件授权成777 然后执行:

gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq

# 恢复
gitlab-backup restore BACKUP=1635869148_2021_11_03_12.9.0
注意:这里没有后面的_gitlab_backup.tar名字
一路yes,恢复是会先删除新服务器上所有gitlab数据的。
拷贝之前备份/etc/gitlab/gitlab-secrets.json,/etc/gitlab/gitlab.rb文件

重新加载配置和重启gitlab
gitlab-ctl reconfigure
gitlab-ctl restart

gitlab配置指南

2.1 需求说明

​ 以前的git是通过ip+域名混合访问,没有启用https。现在golang团队准备启用golang 私有仓库,因其要求必须是https,所以我们想尽办法进行兼容上下,奈何道路曲折。422报错无法避免,只能退而求其次,保证就ip和域名可以访问,但是无法通过web登录,只有新域名可以全名支持各个需求。

最终成型如下:

1.旧ip地址和旧域名已经可以推送和拉取代码
2.新证书域名可以登录和实现go module
3.代码克隆默认显示现在的新域名
2.2 魔改开始

修改vim /etc/gitlab/gitlab.rb ,目的生成gitlab-http的配置文件

external_url 'https://xxx.yyy.com'
nginx['redirect_http_to_https'] = true    <- 增加
nginx['referrer_policy'] = false   <- 增加
2.3 增加ssl证书
sudo mkdir -p /etc/gitlab/ssl
sudo chmod 755 /etc/gitlab/ssl
sudo cp gitlab.rvet.key gitlab.rvet.crt /etc/gitlab/ssl/
2.4 生成配置文件
gitlab-ctl reconfigure
gitlab-ctl restart
运行检查是否异常
2.5 修改nginx配置文件然后备份(增加go 私有仓支持)
/var/opt/gitlab/nginx/conf/gitlab-http.conf
    增加如下配置(go module配置使用)
            if ($args ~* "^go-get=1") {
                    set $condition goget;
            }
            if ($uri ~ "(/[^/]+/[^/]+)(/.*)?") {
                    set $condition "${condition}path";
            }
            if ($condition = gogetpath) {
                    return 200 "<!DOCTYPE html><html><head><meta content='xxx.yyy.com$1 git https://xxx.yyy.com$1.git' name='go-import'></head></html>";
            }
                /var/opt/gitlab/nginx/conf/gitlab-http.conf
    增加如下配置(go module配置使用)
            if ($args ~* "^go-get=1") {
                    set $condition goget;
            }
            if ($uri ~ "(/[^/]+/[^/]+)(/.*)?") {
                    set $condition "${condition}path";
            }
            if ($condition = gogetpath) {
                    return 200 "<!DOCTYPE html><html><head><meta content='xxx.yyy.com$1 git https://xxx.yyy.com$1.git' name='go-import'></head></html>";
            }

    另外另存为/var/opt/gitlab/nginx/conf/gitlab-https.conf
2.6 重新修改/etc/gitlab/gitlab.rb
external_url 'http://10.1.1.243'
2.7 重新生成配置文件
gitlab-ctl reconfigure
2.8 修改clone域名地址显示
/var/opt/gitlab/gitlab-rails/etc/gitlab.yml
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: xxx.yyy.com
port: 443
https: true
2.9 增加旧域名支持配置
cp /var/opt/gitlab/nginx/conf/gitlab-http.conf /var/opt/gitlab/nginx/conf/gitlab-https1.conf
sed -i 's#10.1.1.243#xxx.zzz.com#g' gitlab-https1.conf
2.10 修改gitlab自带nginx配置文件
/var/opt/gitlab/nginx/conf/nginx.conf
增加配置
include /var/opt/gitlab/nginx/conf/gitlab-https.conf;
include /var/opt/gitlab/nginx/conf/gitlab-https1.conf;
2.11 重启gitlab服务
gitlab-ctl restart

golang私有仓库使用教程

3.1 gitlab测试仓库准备,例如
https://xxx.yyy.com/s2b2c/gotogit.git
3.2 gitlab仓库打tag
git tag <tagName> //创建本地tag
git push origin <tagName> //推送到远程仓库
例如: v1.0.0
3.3 项目中 go.mod 中路径要与url路径一致(注意是不加.git)
module xxx.yyy.com/s2b2c/gotogit
3.4 创建api token
创建个人访问令牌
3.4.1.点击右上角,选择您的头像。
3.4.2.选择settings。
3.4.3.点击左侧边栏上,选择Access Tokens。
3.4.4.输入令牌的名称和可选的到期日期。
3.4.5.勾选api Access your API。
3.4.6.粘贴生成的token即可。
3.5 添加git认证到~/.netrc文件(支持多个)
linux and windows(通过bash执行)
cat >  ~/.netrc  <<EOF
machine xxx.yyy.com login xxx password glpat-51vQD6Ds6TL8KxFiATk4
EOF
#chmod 600 ~/.netrc

windows执行(cmd)
(echo machine xxx.yyy.com) > %HOMEPATH%/.netrc
(echo login xxx) >> %HOMEPATH%/.netrc
(echo password glpat-51vQD6Ds6TL8KxFiATk4) >> %HOMEPATH%/.netrc
3.6 编译器idea添加私有仓
GOPRIVATE=xxx.yyy.com
3.7 安装调试
go get xxx.yyy.com/s2b2c/gotogit
3.8 项目测试
package main

import "xxx.yyy.com/s2b2c/gotogit"

func main()  {
seanbao.SeanPrint()
}

参考链接

gitlab升级指南

Go proxy for GitLab