go module,使用gitlab私有倉庫作為專案的依賴包

weixin_34138139發表於2019-01-22

自從golang 1.11推出go moudle機制來更好的管理專案依賴後,就開始小範圍嘗試使用go mod來替換曾經的dep,實話實說還不錯,很穩定,比起dep以及第三方的govendor來說也更加方便和快速。

在曾經使用的專案上中,有一部分專案的依賴是放在github中的公開倉庫的(如中介軟體、工具包),放入公開倉庫中然通過dep將依賴拉取到vendor中。

最近內部又做了個相關的依賴包,也不算工具,但這次多少跟業務有點結合,這次肯定不能放在github public倉庫,於是就想著,放入內部的gitlab私有倉庫中,想著以後能不能把github中的某一部分也遷移過來。

比如,通過RPC或HTTP呼叫服務時可以把公共的struct,service,method放入gitlab私有倉庫中,這是必然的。

在public倉庫好說,在go mod init gitlab.com/groupName/projectName後,不做任何處理直接直接 go mod vendor會自動拉取第三方依賴。但是如果是gitlab等私有倉庫中是get不下來的。

這本質上還是解決go get的問題。所以,接下來,我們要解決go get私有倉庫:

  • 獲取gitlab的access token

進入Gitlab—>Settings—>Access Tokens,然後建立一個personal access token,這裡許可權最好選擇只讀(read_repository)。

  • git配置新增access token

有了access token後,我們還需要在git中進行配置,這樣才能go get下了私有倉庫的包,需要把剛剛的token新增進git的請求頭中,操作如下:

git config --global http.extraheader "PRIVATE-TOKEN: YOUR_PRIVATE_TOKEN"
  • 配置git將請求從ssh轉換為http
    配置如下:
git config --global url."git@gitlab.com:groupName/projectName.git".insteadOf "https://gitlab.com/groupName/projectName.git"`

上述配置已經完成了,可以試著拉取gitlab私有倉庫的程式碼:

go get -u -v gitlab.com/groupName/projectName

此時,執行go mod vendor也是可以正常拉取的。

相關文章