如何讓 Gitlab 私有倉庫支持 Go Get

【導讀】本文介紹了配置 Gitlab 實現私有倉庫的實踐。

通常公司都會有自己的 Git 倉庫,可能涉及到利用 go get 進行項目依賴的問題。

我們以 Gitlab 作爲私有倉庫爲例,倉庫地址爲:gitlab.com

私有倉庫鑑權設置

go get 默認採用的 https 下載項目依賴,而私有倉庫一般採用的 ssh key 的方式鑑權,所以直接使用 go get 會出現 https 鑑權失敗的問題, 解決辦法有兩種。

1. 將 https 替換爲 ssh

這種方式適合在自己的電腦上使用。

讓 git 執行 git clone https://gitlab.com/xx.git時,自動替換爲執行git clone git@gitlab.etsus.net:xx.git, 需要執行如下命令:

git config --global url."git@gitlab.etsus.net:".insteadof "https://gitlab.etsus.net/"

BASH

2. 利用 Gitlab 的 Access Token 鑑權

在有些情況下,比如對於編譯服務器,可能採用 ssh key 的方式權限太大,可以採用Access Token的方式來解決問題。

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

然後讓 git 在執行 git clone https://gitlab.com/xx.git時,自動替換爲執行git clone https://oauth2:${your_access_token}@gitlab.com/xx.git, 需要執行如下命令:

git config --global url."https://oauth2:${your_access_token}@gitlab.com".insteadOf "https://gitlab.com"

${your_access_token}替換爲自己的 token

GOPROXY 的導致的問題

在完成了上面的配置以後,還要看當前是否配置了GOPROXY,如果配置了GOPROXY,會導致私有庫不可用。因爲GOPROXY會導致 go get 所有的請求通過 PROXY 下載,最終導致鑑權失效。因此需要配置GOPRIVATE來指定私有庫,配置到GOPRIVATE中的地址將不會轉發到GOPROXY中了。

命令:

go env -w GOPRIVATE=gitlab.com

http 導致的問題

需要運行在 golang 1.14 版本及以上 go get 默認採用的 https,當我們的私有庫是 http 的時候,需要利用GOINSECURE將 https 轉爲 http。命令如下:

go env -w GOINSECURE=gitlab.etsus.net

轉自:

oskip.com/post/private-repo-http-go-get/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/nMg4HB4sJkgrEC9iyfT4_A