如何在codebuild中使用AWS提供的镜像(Go 1.12)缓存我的模块?
我试图在codebuild中使用AWS的go镜像(1.12)缓存go模块。
深入了解后,我发现,并没有 /go/pkg
文件夹中。因此,当我试图缓存 /go/pkg
它将抛出一个错误。
挂载 gopkgmod 出错:符号链接 codebuildlocal-cachecustom/gopkgmod gopkgmod: no such file or directory
即使我跑了 go mod download
(这将创建 /go/pkg/mod
它不会缓存文件夹,因为codebuild不能提前挂载它)。)
这是我的 codebuild.yml
version: 0.2
phases:
install:
runtime-versions:
golang: 1.12
nodejs: 10
commands:
- npm install
build:
commands:
- go build -ldflags="-s -w" -o api/bin/main api/main.go
cache:
paths:
- /go/src/**/*
- /go/pkg/mod/**/*
我也试过缓存.vendor文件夹,这在codebuild中没有抛出任何错误。然而,我不认为它在缓存任何东西,因为构建时间没有减少。它还说它忽略了符号链接。
warning: ignoring symlink codebuildoutputsrc074479210srcgithub.comkkesleymyrepovendor go: finding github.comawsaws-lambda-go v1.11.1 go: finding github.comstretchrtestify v1.2.1 go: finding github. compmezardgo-difflib v1.0.0 去:找到github.comdavecghgo-spew v1.1.0 去:找到gopkg.inurfavecli.v1 v1.20.0 去:下载github.comawsaws-lambda-go v1.11.1 去:解压github.comawsaws-lambda-go v1.11.1。
这是我的 codebuild.yml
对于这个版本。
version: 0.2
phases:
install:
runtime-versions:
golang: 1.12
nodejs: 10
commands:
- npm install
- go mod vendor
build:
commands:
- go build -mod vendor -ldflags="-s -w" -o api/bin/main api/main.go
cache:
paths:
- /go/src/**/*
- vendor/**/*
在不使用自定义docker镜像的情况下,如何在代码构建中缓存go模块?这可能吗?
为了让它与默认的CodeBuild Ubuntu构建镜像一起工作(我使用的是v4)
cache:
paths:
- '/go/pkg/**/*'
go mod download
. 在我这样做之前,缓存似乎没有工作,所以这似乎是一个关键步骤。下面是我的完整的buildpec.yml,供参考。
version: 0.2
phases:
install:
runtime-versions:
golang: latest
commands:
- "git config --global credential.helper '!aws codecommit credential-helper $@'"
- "git config --global credential.UseHttpPath true"
build:
commands:
- 'go mod edit -dropreplace git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/xyz'
- 'go mod download'
# Use latest from develop for the build (test env only)
- 'go get git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/xyz@develop'
- 'rm -rf "dist"'
- 'cp -r "eb-template" "dist"'
- 'env GOOS=linux GOARCH=amd64 go build -o "dist/bin/server"'
- 'go mod edit -replace git-codecommit.ap-southeast-2.amazonaws.com/v1/repos/xyz=../xyz'
- 'echo -n ${CODEBUILD_RESOLVED_SOURCE_VERSION} > dist/commithash'
artifacts:
base-directory: dist
files:
- '**/*'
cache:
paths:
- '/go/pkg/**/*'