使用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實踐.html
https://blog.csdn.net/nxb593427560/article/details/104875291
https://www.jianshu.com/p/ca4404512cf3
https://segmentfault.com/a/1190000021127791


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM