首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有自定义停靠映像的代码构建中缓存go模块

在没有自定义停靠映像的代码构建中缓存go模块
EN

Stack Overflow用户
提问于 2019-07-16 05:38:46
回答 1查看 1K关注 0票数 6

TL;DR

如何使用AWS提供的映像(Go 1.12)在代码构建中缓存模块?

背景

我试图使用AWS的go映像(1.12)在代码构建中缓存go模块。

试图缓存/go/pkg/mod

在深入挖掘之后,我发现该图像中没有/go/pkg文件夹。因此,当我尝试缓存/go/pkg时,它会抛出一个错误。

安装/go/pkg/mod:符号链接/码构建/本地-缓存/自定义/go/pkg/mod /go/pkg/mod:没有这样的文件或目录

即使在我运行go mod download之后(这将创建/go/pkg/mod,它也不会缓存文件夹,因为代码构建不能更早地挂载它)。

这是我的codebuild.yml

代码语言:javascript
复制
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/**/*

试图缓存./供应商

我还尝试了缓存./供应商文件夹,它不会在代码构建中抛出任何错误。但是,我认为它没有缓存任何东西,因为构建时间并没有减少。它还说它忽略了符号链接。

警告:忽略/codebuild/output/src074479210/src/github.com/kkesley/myrepo/vendor go:查找github.com/aws/aws-lambda-go v1.11.1 go:查找github.com/ stretchr/testv1.2.1 go:查找github.com/pmezard/go-difflib v1.0.0 go:查找github.com/davecgh/go-spew v1.1.0 go:查找gopkg.in/urfave/cli.v1 v1.20.0 go:下载github.com/pmezard/go-spew v1.1.0 goaws/aws-lambda-go v1.11.1 go:提取github.com/aws/aws go v1.11.1

这是我这个版本的codebuild.yml

代码语言:javascript
复制
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/**/*

问题

如何在不使用自定义停靠映像的情况下在代码构建中缓存go模块?有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-03 10:47:42

要让它使用默认的CodeBuild Ubuntu映像(我使用的是v4)

  1. 确保在CodeBuild项目上启用了本地缓存。转到编辑,然后工件,然后确保自定义缓存被勾选

  1. 将缓存路径设置为/go/pkg/**.*
代码语言:javascript
复制
cache:
  paths:
    - '/go/pkg/**/*'
  1. 确保构建脚本在构建go mod download之前包括一个步骤。在我执行此缓存之前,似乎无法工作,因此这似乎是关键一步。

这是我的完整buildspec.yml供参考

代码语言:javascript
复制
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/**/*'
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57050660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档