使用gitlab作为go mod私服

使用gitlab作为go mod私服

在go 1.13.3之前,由于 gitlab 的版本问题,如果使用了 subgroup,则不能正确返回 meta tag。也就是说,我们使用的 gitlab 版本只支持一层 namespace 下建的项目,如果使用了两层namespace就会拉取不到仓库依赖。
问题原因:https://gitlab.com/gitlab-org/gitlab/-/issues/30612
解决办法:
a.迁移项目,将项目整理到一个namespace下。
b.在go.mod中使用replace替换。

replace (
        gitlab.company.com/aa/bb/xlib => gitlab.company.com/aa/bb/xlib.git v1.0.0
)

c.修改go源码

go/src/cmd/go/internal/modload/query.go

d.在gitlab下创建.netrc文件https://stackoverflow.com/questions/56817601/how-to-use-go-dep-with-gitlab-subgroups/57099566#57099566

(1.)设置代理

# direct 表示代理走不通时,使用直接连接
go env -w GOPROXY="https://goproxy.cn,direct"

(2.)设置私服
设置私有库后,go会自动设置GONOPROXY,GONOSUMDB两个环境变量,表示私有库不走代理,也不检查代码sum。

go env -w GOPRIVATE="github.com/myprivate/*,gitlab.ce/*"
go env -w GOPRIVATE="*.company.io,*.company.com,"

(3.)权限问题
将 http 形式的的请求,转换成 ssh 的形式,在.gitconfig中添加一行配置就可以:

[url "git@github.com:"]
    insteadOf = https://github.com/
[url "git@gitlab.com:"]
    insteadOf = https://gitlab.com/

或者:
git config --global url."git@gitlab.com:groupName/projectName.git".insteadOf "https://gitlab.com/groupName/projectName.git"`

// 全局替换,拉取域名下的所有包
git config --global url."git@gitlab.yoursite.com:".insteadof "https://gitlab.yoursite.com/"

相关链接

https://iliubang.cn/go/2019/10/17/基于公司私有gitlab的go-module实践.htmlhttps://blog.csdn.net/nxb593427560/article/details/104875291https://www.jianshu.com/p/ca4404512cf3https://segmentfault.com/a/1190000021127791

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值