кеширование модулей go в сборке кода без пользовательского образа докера

TL;DR

Как я могу кэшировать свои модули в кодовой сборке с помощью образа, предоставленного AWS (Go 1.12)?

Фон

Я пытаюсь кэшировать модули go в сборке кода, используя образ go (1.12) от AWS.

Пробуем кешировать / go / pkg / mod

Покопавшись глубже, я обнаружил, что в этом образе нет папки /go/pkg. Следовательно, когда я пытался кэшировать /go/pkg, это вызывало ошибку.

Ошибка монтирования / go / pkg / mod: символическая ссылка / codebuild / local-cache / custom // go / pkg / mod / go / pkg / mod: нет такого файла или каталога

Даже после того, как я запустил go mod download (который создаст /go/pkg/mod, он не будет кэшировать папку, потому что сборка кода не может смонтировать ее раньше).

Это мой 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

Я также пробовал кешировать папку ./vendor, которая не вызывает ошибок при сборке кода. Однако я не думаю, что он что-то кеширует, потому что время сборки не уменьшается. Он также говорит, что игнорирует символическую ссылку.

предупреждение: игнорирование символической ссылки /codebuild/output/src074479210/src/github.com/kkesley/myrepo/vendor go: поиск github.com/aws/aws-lambda-go v1.11.1 go: поиск github.com/stretchr/testify v1 .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/aws/aws-lambda-go v1.11.1 go: извлечение github.com/aws/aws-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/**/*

Вопрос

Как кэшировать модули Go при сборке кода без использования пользовательского образа докера? Является ли это возможным?

См. также:  Ошибка AWS Lambda: не удалось распаковать загруженный файл

Вы в этом разобрались? Я пытаюсь сделать то же самое …   —  person kkesley    schedule 02.05.2020

@JoelDuckworth, извини, я так и не понял.   —  person kkesley    schedule 02.05.2020

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. kkesley

    Чтобы заставить его работать с образом сборки CodeBuild Ubuntu по умолчанию (я использую v4)

    1. Убедитесь, что в проекте CodeBuild включено локальное кэширование. Перейдите к редактированию, затем артефакты и убедитесь, что флажок Custom Cache отмечен  Настройки локального кеша Codebuild

    2. Задайте путь к кешу как /go/pkg/**.*

    cache:
      paths:
        - '/go/pkg/**/*'
    
    1. Убедитесь, что ваш сценарий сборки включает шаг перед сборкой для go mod download. До того, как я сделал это кеширование, казалось, что это не работает, поэтому это казалось ключевым шагом.

    Вот мой полный buildspec.yml для справки

    version: 0.2
    
    phases:
      install:
        runtime-versions:
          golang: latest
        commands:
          - "git config --global credential.helper '!aws codecommit credential-helper [email protected]'"
          - "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/[email protected]'
          - '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/**/*'
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: