Как назначить вывод команды для переменной в сборке кода
Я пытаюсь создать образ докера всякий раз, когда в исходном коде есть толчок, и перемещать образ докера в ECR(реестр контейнеров EC2).
Я пробовал со следующим файлом build-spec
version: 0.2
env:
variables:
IMG: "app"
REPO: "<<zzzzzzzz>>.dkr.ecr.us-east-1.amazonaws.com/app"
phases:
pre_build:
commands:
- echo Logging in to Amazon ECR...
- aws ecr get-login --region us-east-1
- TAG=echo $CODEBUILD_RESOLVED_SOURCE_VERSION | head -c 8
build:
commands:
- echo $TAG
- docker build -t $IMG:$TAG .
- docker tag $IMG:$TAG $REPO:$TAG
post_build:
commands:
- docker push $REPO:$TAG
- printf Image":"%s:%s" $REPO $TAG > build.json
artifacts:
files: build.json
discard-paths: yes
когда я строю это, я получаю сообщение об ошибке invalid reference format
при сборке докера -t
Я заглянул в документ и не нашел помощи.
2 ответа
TAG=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | head -c 8)
Вы можете использовать $()
version: 0.2
phases:
install:
commands:
- echo Entered the install phase...
- TAG=$(echo "This is test")
pre_build:
commands:
- echo $TAG
build:
commands:
- echo Entered the build phase...
- echo Build started on $TAG
Журналы:
[Container] 2018/03/17 16:15:31 Running command TAG=$(echo "This is test")
[Container] 2018/03/17 16:15:31 Entering phase PRE_BUILD
[Container] 2018/03/17 16:15:31 Running command echo $TAG
This is test
Так что после множества попыток я наконец нашел свою ошибку.
Env CODEBUILD_RESOLVED_SOURCE_VERSION следует заменить на переменную среды CODEBUILD_SOURCE_VERSION, потому что я использую codebuild для сборки непосредственно из исходного репозитория в GitHub.
Чтобы войти в ECR, необходимо добавить --no-include-email
вариант и оберните команду с помощью $(). Это позволит вам выполнить вход в Docker. Мой обновленный файл buildspec будет похож на ниже
version: 0.2
env:
variables:
REPO: "184665364105.dkr.ecr.us-east-1.amazonaws.com/app"
phases:
pre_build:
commands:
- echo $CODEBUILD_SOURCE_VERSION
- TAG=$(echo $CODEBUILD_SOURCE_VERSION | head -c 8)
- echo Logging in to Amazon ECR...
- $(aws ecr get-login --no-include-email --region us-east-1)
build:
commands:
- echo $TAG
- echo $REPO
- docker build --tag $REPO:$TAG .
post_build:
commands:
- docker push $REPO:$TAG