文章目錄
一、簡介
公司項目使用 go module 開發的過程中會有一些自己的庫要引用,這些庫用gitlab管理,需要研究引用gitlab庫的方法,下面是研究過程中的一些經驗。
介紹幾種引用方案:
- 1、引用本地目錄
- 2、引用合規地址庫
- 3、引用私有不合規庫
- 4、最常規(噁心) 的私有不合規庫
上述名詞中的 合規 是指:
- 庫的地址是通過域名方式訪問
- 支持HTTPS
- 庫的地址通過 80 和 443 端口,而不是其它端口
滿足上述條件即是 合規庫,否則是 不合規庫,由於通常不合規庫都是私有的,這裏直接叫 私有不合規庫。
其中,違反第3點的最爲噁心。
注意:本文撰寫於 2020年7月3日,go版本 1.14.4,到撰寫日爲止內容真實有效,均經過本人驗證。
二、引用本地目錄
修改文件 go.mod:
module main
go 1.14
// 替換規則
replace (
github.com/pborman/uuid => /data/go-packages/uuid v1.2.0 // 絕對路徑 或 相對路徑 都可以
)
// 源地址
require (
github.com/pborman/uuid v1.2.0
)
默認使用 github.com/pborman/uuid
包會到 Github 上去下載,但這個包還在本地開發中並未push到線上,那麼可以通過 replace
配置來重定向當前項目對該包的加載路徑:
github.com/pborman/uuid => /data/go-packages/uuid
這裏 /data/go-packages/uuid
爲本地包的絕對路徑,這樣寫就可以了,當本地 uuid
包代碼修改後就可以在當前項目看到實時效果了,注意中間符號是 =>
配置好以後正常拉取代碼、編譯、調試。
二、引用合規庫
與 引用本地目錄類似,修改文件 go.mod:
module main
go 1.14
// 替換規則
replace (
github.com/pborman/uuid => gitee.com/gober/uuid v1.2.0 // 開源中國地址
)
// 源地址
require (
github.com/pborman/uuid v1.2.0
)
接下來正常拉取代碼、編譯、調試。
三、引用私有不合規庫
3.1、配置倉庫訪問權限
有以下兩種授權方式:
-
1、訪問令牌(Access Token)
通過在gitlab生成個人的“訪問令牌”,並在拉取git倉庫的機器上配置Token來實現訪問倉庫。
通常是在這個地址:https://{{gitlab_url}}/profile/personal_access_tokens
{{gitlab_url}}
是gitlab地址 -
2、SSH祕鑰(SSH Key) 【推薦】
通過在gitlab的 個人賬戶 或者 倉庫 下面配置 SSH祕鑰,來實現客戶端訪問倉庫。
注意:這種方式高效、簡單,只要保證本地
.ssh
目錄下存在相應的祕鑰對即可。
3.2、本地配置“訪問令牌(Access Token)”參數
使用"ssh密鑰"授權則跳過本節
對本項目生效:
git config http.extraheader "PRIVATE-TOKEN:YOUR_PRIVATE_TOKEN"
對所有git項目生效:
git config --global http.extraheader "PRIVATE-TOKEN:YOUR_PRIVATE_TOKEN"
注:根據需求任意選擇上面一個配置即可
3.3、配置使用git方式拉取代碼
git config --global url."git@{{gitlab_url}}:groupName/projectName.git".insteadOf "https://{{gitlab_url}}/groupName/projectName.git"`
也可以直接全局替換,那麼可以拉取域名下的所有包,如:
git config --global url."git@{{gitlab_url}}:".insteadof "https://{{gitlab_url}}/"
上面是通過命令修改配置,也可以像這樣,直接修改配置文件 ~/.gitconfig
,在裏面添加如下配置:
[url "git@{{gitlab_url}}:"]
insteadOf = https://{{gitlab_url}}/
注意:
insteadof 中的參數是 https,因爲不管目標地址是http還是https,go get默認使用https方式訪問,因此我們要強制將https轉換成git協議。
五、最常見的私有不合規庫
爲什麼會有這種噁心至極的私有不合規庫?這種庫有什麼特點?
這種庫違反了合規庫每一條規則:
- 1、ip訪問
- 2、端口非80、443
- 3、沒有證書
其中第3點並不重要,第2點是產生這種情況的根源。
這種情況下,我們要:
-
1、結合章節 “三、引用私有不合規庫”
-
2、在
go.mod
和 git config 中配置別名(映射)通過兩次別名,重定向到
IP:Port
。-
2.1、在
go.mod
中配置地址別名,該別名是真實有效的 HTTPS 地址go.mod
配置:module main go 1.14 // 替換規則 replace ( github.com/pborman/uuid => gitee.com/gober/uuid v1.2.0 // 第一次別名地址,地址真是有效,並且是HTTPS ) // 源地址 require ( github.com/pborman/uuid v1.2.0 )
-
2.2、在 git config 中再次配置別名,將
go.mod
中的別名指向真正的地址git config --global url."[email protected]:CloudComputing/Cloud-Fundamation/Operation-Center".insteadof "https://gitee.com/gober"
-
注意:
假如你的ssh端口也改了,不是22,記得git@{{gitlab_url}}裏面也要相應修改
參考資料及附錄
- Golang使用go.mod配置加載本地模塊
- Go填坑之將Private倉庫用作module依賴
- go module,使用gitlab私有倉庫作爲項目的依賴包 2019.01.22 01:05:14
- gitlab 項目支持 go module 2019-07-15 20:10:06
本文由 qingchuwudi 譯製或原創,除非另有聲明,在不與原著版權衝突的前提下,本作品採用署名-非商業性使用-相同方式共享 4.0 國際 (CC BY-NC-SA 4.0) 進行許可。