Golang 构建使用 Gitlab私有仓库
私有库的创建
和普通的go项目一样,需要使用go mod
mod名必须为仓库地址 gitlab.xxx.com/xxx/xxx
私有库的使用
$ go env -w GO111MODULE="on"
$ go env -w GOPROXY="https://goproxy.cn,direct"
# 设置GOPRIVATE来跳过私有库,不走GOPROXY的代理
$ go env -w GOPRIVATE="gitlab.xxx.com"
# 将获取仓库项目的方式由http或https改为ssh
$ git config --global url."git@gitlab.xxx.com:".insteadOf "https://gitlab.xxx.com/"
# 然后就可以下载私有库的包了, 例如
$ go get -v gitlab.xxx.com/devops/go-tool
go mod 用的是 go get,go get 调用的是 git,git 分为 https 或者 ssh
私有库的更新
私有仓库push后, merge到master, 需要给最新的master分支打一个版本tag, 格式为va.b.c, 例如 v0.0.1
$ git tag v0.0.1
$ git push origin v0.0.1
版本选择规则:
- go get会自动下载并安装package,然后更新到go.mod中
- 可以使用go get package[@version]来安装指定版本的package,不指定version时默认行为和go get package@latest一样
- version可以是vx.y.z这种形式或者直接使用commit的checksum,也可以是master或者latest
- 当version是latest时,也就是默认行为,对于有tags的package,会选取最新的tag,对于没有tags的package,则选取最新的commit
- 当version是master时,不管package有没有打tag,都会选择master分支的最新commit
- 可以在version前使用>,>=,<,<=,表示选取的版本不得超过/低于version,在这个范围内的符合latest条件的版本
- go get -u可以更新package到latest版本
- go get -u=patch将只更新小版本,例如从v1.2.4到v1.2.5
- 当想要修改package的版本时,只需要go get package@指定的version即可