美文网首页
go module 本地引用与引用远程gogs自建项目

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

作者: 98k_sw | 来源:发表于2020-07-18 09:43 被阅读0次

    【原文】(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
    

    相关文章

      网友评论

          本文标题:go module 本地引用与引用远程gogs自建项目

          本文链接:https://www.haomeiwen.com/subject/phtnhktx.html