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 при сборке кода без использования пользовательского образа докера? Является ли это возможным?
Вы в этом разобрались? Я пытаюсь сделать то же самое … — person kkesley schedule 02.05.2020
@JoelDuckworth, извини, я так и не понял. — person kkesley schedule 02.05.2020
Чтобы заставить его работать с образом сборки CodeBuild Ubuntu по умолчанию (я использую v4)
Убедитесь, что в проекте CodeBuild включено локальное кэширование. Перейдите к редактированию, затем артефакты и убедитесь, что флажок Custom Cache отмечен
Задайте путь к кешу как
/go/pkg/**.*
go mod download
. До того, как я сделал это кеширование, казалось, что это не работает, поэтому это казалось ключевым шагом.Вот мой полный buildspec.yml для справки