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 "git@test.cn:"]
        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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339