golang 基于 gitlab 建立内部私有库 |Go主题月

2,241 阅读2分钟

为什么需要私有库?当团队经过多个 GO 项目沉淀以后,我们常常会把一些常用的方法、函数、内部包提取出来作为一个单独的项目,同时我们暂时也不考虑开源。此时我们可以建立自己的私有库,这样新项目可以复用之前的经验、代码。

注意:

1.go version 大于 1.13
2.默认你已经在公司内部搭建的 gitlab 上建立了项目 XXX,并且 gitlab 已配置好了域名。

1.设置免密 clone,根据不同操作系统创建 netrc 文件

以下特别注意:netrc 文件内容有三个地方需要替换:

host     替换为你 gitlab 的域名,如:gitlab.company.com
username 替换为你拉取代码时的 git username
APIKEY   替换为 gitlab 生成的 access_token
  • unix 操作系统

    新建文件 ~/.netrc

    touch ~/.netrc
    

    文件里面写入如下内容:

    machine host login username password APIKEY
    
  • Windows 操作系统

    a.设置环境变量 HOME 值为:C:\Users\name ,注意:name 替换为你的账户名

    b.在 C:\Users\name 目录下新建 _netrc 文件, 注意:name 替换为你的账户名

    machine host
    login username
    password APIKEY
    

生成access token 方法:

a.点击头像 -> Settings -> Access Tokens

b.填入相关信息

c.点击创建按钮后会出现一串token,记得保存下来。

image.png

2.将环境变量

GO111MODULE="on"

3.将环境变量 GOPRIVATE(你 gitlab 的域名)

GONOPROXY="gitlab.company.com"

4.设置环境变量 GOPROXY

GOPROXY="https://goproxy.cn,direct"

5.最后当然是拉代码拉:

进入项目根目录下运行命令:

go get -insecure gitlab.company.com/repo/gopkgs

-insecure 选项代表跳过 https 验证

此时你就可以在你的其他项目里面通过 import 导入私有库的包并使用啦。

package main

import (
    "gitlab.company.com/repo/gopkg/cache"
)

func main() {
    cache.Init()
}


注意:

1.由于gitlab版本bug导致,私有项目路径层级不能超过2级: 只能这样: gitlab.xxx.com/repo/cache, 而 gitlab.xxx.com/repo/cc/cache 这样则不行

2.项目根目录下必须要有 go.mod 文件,同时 module 要定义成这样: gitlab.xxx.com/repo/cache