【原文】(http://alblue.cn/articles/2020/05/13/1589382112325.html
如果自建的工具包需要被自己的其他項(xiàng)目引用应媚,有兩種方案
本地方案
優(yōu)勢:不需要配置代理、本地修改,其他項(xiàng)目同步實(shí)時(shí)更新津辩。
缺點(diǎn):無法協(xié)同,管理麻煩拯辙、引用子包麻煩丰涉。
配置步驟
使用go mod replace
關(guān)鍵字
當(dāng)前目錄如下
$ls
kit myapp
$tree
gobak/
├── kit
│ └── limiter
└── myapp
假設(shè)myapp項(xiàng)目需要引用kit項(xiàng)目,可以在myapp的go.mod文件寫
replace git.xxx/kit => ../kit
然后在kit項(xiàng)目下面執(zhí)行
go mod init kit
在myapp項(xiàng)目中引用kit包的地方
import "git.xxx/kit"
fun test(){
kit.Do()
}
引用kit項(xiàng)目下的limiter
需要在limiter下面再生成一個(gè)mod
go mod init limiter
然后在myapp中先修改go.mod文件
replace git.xxx/kit/limiter => ../kit/limiter
使用
import "git.xxx/kit/limiter"
fun test(){
limiter.Do()
}
遠(yuǎn)程引用gogs自建項(xiàng)目
優(yōu)勢:協(xié)作方便,半自動(dòng)拉取最新代碼涎永。
缺點(diǎn):協(xié)作的同事都需要進(jìn)行如下的配置思币。
- gogs倉庫必須是https
- 修改 go env
- 修改.gitconfig
- 修改項(xiàng)目引用
怎么配置https,自行百度羡微。跳過
修改 go env
vi .bash_profile
增加如下兩行
export GOPROXY=https://goproxy.cn,direct
export GOPRIVATE="*.xx.cn"
xx.cn 自行替換成自建gogs的域名地址谷饿,比如你gogs的域名是 git.test.cn,那就是 *.test.cn
第二個(gè)GOPROXY必須增加direct,才能引用私有倉庫
修改.gitconfig
增加如下配置
[url "git@test.cn:"]
insteadOf = https://git.test.cn/
- git@必須拷淘,test.cn根據(jù)自身域名來
-
https://git.test.cn/ 這個(gè)你可以隨便寫各墨。但是項(xiàng)目里面引用必須和這個(gè)一樣。
比如這里你寫成https://git.test123.cn/ 那么等會(huì)引用項(xiàng)目启涯,必須是
import git.test123.cn/gogs/kit
修改項(xiàng)目引用
首先將kit項(xiàng)目推送到gogs倉庫贬堵,假設(shè)地址是 git.test.cn/my/kit
修改kit 項(xiàng)目的module命名
之前本地的go.mod是
module kit
現(xiàn)在需要改為
module git.test.cn/my/kit.git
注意下結(jié)尾的 .git
要加上
引用
在myapp項(xiàng)目修改go.mod
之前本地引用為
module myapp
replace git.xxx/kit/limiter => ../kit/limiter
replace git.xxx/kit => ../kit
現(xiàn)在改為
module myapp
require git.test.cn/my/kit.git latest
注意下latest也可以修改為commit logid。用latest默認(rèn)拉取master分支的最新代碼结洼。
$ go mod tidy
執(zhí)行后會(huì)自動(dòng)將latest修改為master的最新commit logid黎做。
module myapp
require git.test.cn/my/kit.git v0.0.0-20200513142954-7c63b23dda7c
項(xiàng)目使用
import git.test.cn/my/kit.git
func do(){
kit.Do()
}
更新kit包
如果要更新kit包的代碼,需要將myapp的go.mod配置文件后面的版本號(hào)刪除松忍,改為latest,再執(zhí)行
go mod tidy
引用limiter
直接引用即可
import git.test.cn/my/kit.git/limiter
func do(){
limiter.Do()
}
Jenkins配置環(huán)境
首先需要切換到Jenkins用戶蒸殿,為Jenkins生成一個(gè)ssh秘鑰
su jenkins
ssh-keygen -t rsa
然后將公鑰配置到gogs的個(gè)人設(shè)置中,這樣Jenkins在拉取項(xiàng)目的包 時(shí)就有權(quán)限了鸣峭。
在Jenkins的Shell中執(zhí)行
export GOPROXY=https://goproxy.cn,direct
export GOPRIVATE="*.test.cn"
DIR=$GOROOT/src/xx
mkdir -p $DIR
rm -rf $DIR/*
cp -rf $WORKSPACE/* $DIR/
cd $DIR
go build -o xxx
chmod 755 xx
mv -f ./xxx