【原文】(http://alblue.cn/articles/2020/05/13/1589382112325.html
如果自建的工具包需要被自己的其他项目引用,有两种方案
本地方案
优势:不需要配置代理、本地修改,其他项目同步实时更新。
缺点:无法协同,管理麻烦、引用子包麻烦。
配置步骤
使用go mod replace
关键字
当前目录如下
$ls
kit myapp
$tree
gobak/
├── kit
│ └── limiter
└── myapp
假设myapp项目需要引用kit项目,可以在myapp的go.mod文件写
replace git.xxx/kit => ../kit
然后在kit项目下面执行
go mod init kit
在myapp项目中引用kit包的地方
import "git.xxx/kit"
fun test(){
kit.Do()
}
引用kit项目下的limiter
需要在limiter下面再生成一个mod
go mod init limiter
然后在myapp中先修改go.mod文件
replace git.xxx/kit/limiter => ../kit/limiter
使用
import "git.xxx/kit/limiter"
fun test(){
limiter.Do()
}
远程引用gogs自建项目
优势:协作方便,半自动拉取最新代码。
缺点:协作的同事都需要进行如下的配置。
- gogs仓库必须是https
- 修改 go env
- 修改.gitconfig
- 修改项目引用
怎么配置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
第二个GOPROXY必须增加direct,才能引用私有仓库
修改.gitconfig
增加如下配置
[url "[email protected]:"]
insteadOf = https://git.test.cn/
- git@必须,test.cn根据自身域名来
- https://git.test.cn/ 这个你可以随便写。但是项目里面引用必须和这个一样。
比如这里你写成https://git.test123.cn/ 那么等会引用项目,必须是
import git.test123.cn/gogs/kit
修改项目引用
首先将kit项目推送到gogs仓库,假设地址是 git.test.cn/my/kit
修改kit 项目的module命名
之前本地的go.mod是
module kit
现在需要改为
module git.test.cn/my/kit.git
注意下结尾的 .git
要加上
引用
在myapp项目修改go.mod
之前本地引用为
module myapp
replace git.xxx/kit/limiter => ../kit/limiter
replace git.xxx/kit => ../kit
现在改为
module myapp
require git.test.cn/my/kit.git latest
注意下latest也可以修改为commit logid。用latest默认拉取master分支的最新代码。
$ go mod tidy
执行后会自动将latest修改为master的最新commit logid。
module myapp
require git.test.cn/my/kit.git v0.0.0-20200513142954-7c63b23dda7c
项目使用
import git.test.cn/my/kit.git
func do(){
kit.Do()
}
更新kit包
如果要更新kit包的代码,需要将myapp的go.mod配置文件后面的版本号删除,改为latest,再执行
go mod tidy
引用limiter
直接引用即可
import git.test.cn/my/kit.git/limiter
func do(){
limiter.Do()
}
Jenkins配置环境
首先需要切换到Jenkins用户,为Jenkins生成一个ssh秘钥
su jenkins
ssh-keygen -t rsa
然后将公钥配置到gogs的个人设置中,这样Jenkins在拉取项目的包 时就有权限了。
在Jenkins的Shell中执行
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