Как назначить вывод команды для переменной в сборке кода

Я пытаюсь создать образ докера всякий раз, когда в исходном коде есть толчок, и перемещать образ докера в 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
Другие вопросы по тегам