CI里使用go mod管理包解决墙和私有包问题的方法(go1.13)

吾八哥 效率工具 2019-09-14 290 0

背景

go mod是go1.11的时候推出的包的管理方法,但实际上在最新的go1.13之前我都只是尝试使用过go mod,但并未真正在生产环境使用,主要原因有两个方面:

  1. 1.众所周知的墙的问题

  2. 2.内部私有包如何拉取的问题

对于上面第一个原因大家都会想到使用goproxy代理,确实是可以使用goproxy代理,但这样所有拉包的过程都走了代理,导致内部的一些包就无法拉取下来了,把1解决了2无法解决,2解决了1就有问题了,对于这个问题go1.13给我们带来了解决方法。

go1.13里的go mod

官方资料:https://github.com/golang/go/wiki/Modules

go1.13里的go mod管理包可以解决上面两个问题,具体写法为:

go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOPRIVATE=*.17go.wang

这样需要翻墙的包就走goproxy代理了,内部包就走原有的内部包网络了,这种写法仅1.13的版本支持的。

CI阶段使用go mod

如果是在CI阶段(gitlab自带的CI)的写法则为:

image: golang:1.13

variables:
  GOPROXY: "https://goproxy.cn,direct"
  GOPRIVATE: "*.17go.wang"

stages:
    - test
    - build

lint:
  stage: test
  script:    
    - curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b /usr/bin v1.17.0
    - golangci-lint run ./...
    
ut:
  stage: test
  script:    
    - go test -cover -bench=. -v ./...    

build:
  stage: build
  script:    
    - go build ./...


分享:

扫一扫在手机阅读、分享本文