go module導入gitlab私有庫

go module導入gitlab私有庫

gitlabprivatesubgroupgo getgo modulegoproxy
由於golang的開發,多多少少會引入一些牆外依賴,因此在使用go module管理時,我們都喜歡設置代理,這樣不僅能夠訪問到外網依賴庫,還能加快依賴的下載速度。目前國內的不錯的go-module代理地址:https://goproxy.cn
1、添加go proxy

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

2、設置私有庫:

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

設置私有庫後,go會自動設置GONOPROXYGONOSUMDB兩個環境變量,表示私有庫不走代理,也不檢查代碼sum。
執行這兩個步驟,可以解決大部分私有庫導入問題。但是在go 1.13.3之前,如果導入的是gitlab中的且存在subgroup的依賴庫(比如:gitlab.com/myname/mysubgroup/myproject),還存在這問題。
在go項目代碼中,導入庫時,往往需要在依賴庫的版本庫跟地址後面加上.git後綴(如果依賴庫的根路徑還有其他子包,則gitlab.com/myname/mysubgroup/myproject.git/mysubpackage),才能讓go get正確下載。這裏有兩種情況:

  1. 依賴庫使用了go module管理;
  2. 依賴庫沒有使用go module管理;

第一種情況: 下載完成後,go會檢測依賴庫的go.mod定義的包名和你導入的包名是否一致,不一致則導入失敗。Fail
第二種情況:由於沒有go.mod可供檢查,所以可以導入。OK
這兩種情況,怎麼看怎麼彆扭。

go 1.13.3之後,支持gitlab的subgroup中的依賴庫,可以不加.git後綴,但是必須具有gitlab的相應的權限,也就是帶上賬號密碼才能查看subgroup下面的依賴庫,否則gitlab只返回subgroup的路徑給go get。
如果你使用了go 1.13.3及之後的版本,則可以在HOME目錄下編輯.netrc文件(這玩意也可以用來保存github的賬號密碼,避免每次都要輸入賬號密碼),沒有則創建,輸入以下文本,並保存:

machine gitlab.mydomain
login username 
password mypassword

配置完之後,則可以使用以下命令下載依賴包,並且可以在項目中正常導入依賴包:

go get -v gitlab.com/myname/mysubgroup/myproject/mysubpakcage

另外:
使用自建gitlab,版本須在11.7.0及之後,此版本後,才支持go使用basic auth,也就是賬號密碼授權。gitlab官網已支持。11.7.0之前的版本需要一個warden的東西,不知道這個幹嘛用的,它需要賬號和token授權,可能需要在自建gitlab服務端配置才能生效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章