Go Module 支援 HTTP 協議的私有庫方案
需要 go 1.14 及以上版本支援
背景
假設有個 ABC 公司,在內網部署了一個 gitlab 的服務,域名是 http://git.abc.com 。他們的程式設計師需要使用 Go Module 的功能。 由於有些公共程式碼是公司內部的,而有些依賴則是 Github 上開源的,另外為了提高 Go Module 下載速度,他們還打算用阿里雲的加速服務。
問題來了,Go Module 預設支援的是 https 的域名,所以內網的 gitlab 服務就比較麻煩,也就是說內網的 gitlab 的庫下載的時候要滿足兩點需求,一個是支援 http 協議,另外一個是不使用阿里雲的代理。
方案
首先升級 Git 版本,當然也可以試試下面的步驟先,如果編譯過程下載私有庫的時候沒有出現 unknown revision
的錯誤,就不需要升級 Git。升級 Git 肯定都會,貼一個 Centos 7 的升級指令碼。
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.26.2.tar.gz
yum install libcurl-devel
yum install libcom_err-devel
yum install libopenssl-devel
CPPFLAGS="-I/usr/include/" LDFLAGS="-L/usr/lib64" ./configure --prefix /usr/local/git/
make && make install
其次,我們需要引入兩個環境變數來支援私有庫的 http 協議和忽略使用阿里雲的代理。
export GOINSECURE=git.abc.com
export GONOPROXY=git.abc.com
這樣的話,整個配置如下:
# set GOPATH
export GOPATH=/home/jenkins/go/GoProjects
# enable Go module
export GO111MODULE=on
export GOINSECURE=git.abc.com
export GONOPROXY=git.abc.com
export GOPROXY=https://mirrors.aliyun.com/goproxy/
上面的內容搞定之後,如果你下載私有庫的時候還會出現下面的錯誤,要求提供鑑權。
go: finding module for package git.abc.com/devops/base/wechat
go: finding module for package git.abc.com/devops/base/storage
conf/config.go:6:2: module git.abc.com/devops/base/storage: git ls-remote -q origin in /home/jenkins/go/GoProjects/pkg/mod/cache/vcs/c93a7972976a1967065d0c6e6991f8c13a161f1a51c5aa2079b1724afad589a1: exit status 128:
fatal: could not read Username for 'http://git.abc.com': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.
conf/config.go:7:2: module git.abc.com/devops/base/wechat: git ls-remote -q origin in /home/jenkins/go/GoProjects/pkg/mod/cache/vcs/c93a7972976a1967065d0c6e6991f8c13a161f1a51c5aa2079b1724afad589a1: exit status 128:
fatal: could not read Username for 'http://git.abc.com': terminal prompts disabled
Confirm the import path was entered correctly.
If this is a private repository, see https://golang.org/doc/faq#git_https for additional information.
Build step 'Execute shell' marked build as failure
那麼,需要設定下面的內容。
git config --global http.extraheader 'PRIVATE-TOKEN: <AccessToken>'
git config --global url."git@git.abc.com:".insteadOf "http://git.abc.com/"
其中那個 替換為 Gitlab 裡面的訪問 AccessToken 即可,自己生成一個。
最後,就可以使用 go build 啦。
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- RTSP協議、RTMP協議、HTTP協議的區別協議HTTP
- 02 前端HTTP協議(圖解HTTP) 之 簡單的HTTP協議前端HTTP協議圖解
- 協議中的私有屬性協議
- 如何實現IIS 7.0對非HTTP協議的支援HTTP協議
- HTTP 協議HTTP協議
- [HTTP協議]HTTP協議
- http協議HTTP協議
- go module,使用gitlab私有倉庫作為專案的依賴包GoGitlab
- http協議分析HTTP協議
- 理解http協議HTTP協議
- HTTP協議概述HTTP協議
- HTTP 協議類HTTP協議
- HTTP協議(2)HTTP協議
- 小解http協議HTTP協議
- HTTP 協議的前世今生HTTP協議
- HTTP協議的特點HTTP協議
- 基於 CentOS 7 搭建支援 HTTP 協議的 SVN 伺服器CentOSHTTP協議伺服器
- 《圖解HTTP》——簡單的HTTP協議圖解HTTP協議
- 《圖解HTTP》—簡單的HTTP協議圖解HTTP協議
- HTTP協議和HTTPS協議的異同點?HTTP協議
- HTTP 協議圖解HTTP協議圖解
- 瞭解HTTP協議HTTP協議
- HTTP協議那些事HTTP協議
- HTTP協議簡述HTTP協議
- HTTP 協議簡介HTTP協議
- Http協議簡介HTTP協議
- HTTP2 協議HTTP協議
- 簡述HTTP協議HTTP協議
- HTTP 協議完全解析HTTP協議
- HTTP協議基礎HTTP協議
- Http協議入門HTTP協議
- HTTP通訊協議HTTP協議
- 淺談HTTP協議HTTP協議
- HTTP 協議入門HTTP協議
- 圖解 HTTP 協議圖解HTTP協議
- http協議內容HTTP協議
- HTTP 協議詳解HTTP協議
- HTTP協議概念篇HTTP協議