Go Module 支援 HTTP 協議的私有庫方案
背景
假設有個 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
相關文章
- go module,使用gitlab私有倉庫作為專案的依賴包GoGitlab
- 02 前端HTTP協議(圖解HTTP) 之 簡單的HTTP協議前端HTTP協議圖解
- 如何實現IIS 7.0對非HTTP協議的支援HTTP協議
- 協議中的私有屬性協議
- http協議HTTP協議
- HTTP 協議HTTP協議
- HTTP協議和HTTPS協議的異同點?HTTP協議
- 理解http協議HTTP協議
- http協議分析HTTP協議
- HTTP協議(2)HTTP協議
- HTTP 協議類HTTP協議
- 小解http協議HTTP協議
- HTTP協議概述HTTP協議
- HTTP協議的特點HTTP協議
- HTTP 協議的前世今生HTTP協議
- 《圖解HTTP》——簡單的HTTP協議圖解HTTP協議
- golang專案引用GitHub私有倉庫moduleGolangGithub
- Bigfile 用新的方式管理檔案,支援 HTTP,RPC 以及 FTP 協議HTTPRPCFTP協議
- 輕鬆讓你的nginx伺服器支援HTTP2協議Nginx伺服器HTTP協議
- HTTP協議之:HTTP/1.1和HTTP/2HTTP協議
- HTTP協議的通訊框架HTTP協議框架
- HTTP協議簡述HTTP協議
- HTTP 協議簡介HTTP協議
- HTTP協議那些事HTTP協議
- http協議內容HTTP協議
- Http與Https協議HTTP協議
- Http協議入門HTTP協議
- 瞭解HTTP協議HTTP協議
- HTTP通訊協議HTTP協議
- HTTP和HTTPS協議HTTP協議
- HTTP 協議圖解HTTP協議圖解
- HTTP2 協議HTTP協議
- 簡述HTTP協議HTTP協議
- Http協議簡介HTTP協議
- HTTP 協議完全解析HTTP協議
- RPC和 HTTP協議RPCHTTP協議
- HTTP協議詳解HTTP協議
- HTTP協議基礎HTTP協議