go module 本地引用与引用远程gogs自建项目

【原文】(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自建项目

优势:协作方便,半自动拉取最新代码。
缺点:协作的同事都需要进行如下的配置。

  1. gogs仓库必须是https
  2. 修改 go env
  3. 修改.gitconfig
  4. 修改项目引用

怎么配置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

你可能感兴趣的:(go module 本地引用与引用远程gogs自建项目)