Bitbucket Pipelines - шаги - докер - не могу найти изображение - PullRequest
0 голосов
/ 12 мая 2018

Я строю свою линию трубопровода, чтобы создать образ докера, а затем отправляю его в AWS.Я разбил его на этапы, и в Bitbucket вы должны указать ему, какие артефакты следует разделить между ними.Я чувствую, что это простая ошибка, но я просто не могу понять это.

Ошибка в 'теге докера' на шаге 4 с:

docker tag $DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER $AWS_REGISTRY_URL/$DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER
Error response from daemon: No such image: projectname:v.11

По сути, он не может найти созданное изображение докера ...

Вот мой конвейерный скрипт (некоторыеэто упрощено)

image: atlassian/default-image:latest

options:
  docker: true

pipelines:
  branches:
    dev:          
      - step:
         name: 1. Install dotnet
         script:
           # Do things

      - step:
         name: 2. Install AWS CLI
         script:
           # Do some more things

      - step:
         name: 3. Build Docker Image
         script:
           - export DOCKER_PROJECT_NAME=projectname

           - docker build -t $DOCKER_PROJECT_NAME:latest -t $DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER .
         artifacts:
           - ./**

      - step:
         name: 4. Push Docker Image to AWS
         script:
           # Tag and push my docker image to ECR
           - export DOCKER_PROJECT_NAME=projectname
           - docker tag $DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER $AWS_REGISTRY_URL/$DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER
           - docker push $AWS_REGISTRY_URL/$DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER

Теперь я знаю, что этот скрипт работает, но только если я удалю все шаги.По какой-либо причине шаг 4 не имеет доступа к образу докера, созданному на шаге 3. Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 10 августа 2018

Образ Docker не передается с шага 3 на шаг 4, так как образ Docker не сохраняется в каталоге сборки.

Самое простое решение - объединить все четыре шага в один шаг следующим образом:

image: atlassian/default-image:latest

options:
  docker: true

pipelines:
  branches:
    dev:          
      - step:
         script:
           # Install dependencies
           - ./install-dot-net
           - ./install-aws-cli

           # Build the Docker image
           - export DOCKER_PROJECT_NAME=projectname
           - docker build -t $DOCKER_PROJECT_NAME:latest -t $DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER .

           # Tag and push the Docker image to ECR
           - export DOCKER_PROJECT_NAME=projectname
           - docker tag $DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER $AWS_REGISTRY_URL/$DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER
           - docker push $AWS_REGISTRY_URL/$DOCKER_PROJECT_NAME:v.$BITBUCKET_BUILD_NUMBER
0 голосов
/ 24 июня 2018

Ваши изображения Docker не сохраняются в папке, в которой вы запускаете сборку, поэтому они не сохраняются в артефактах и ​​не доступны на следующем шаге.

Даже если они были (вы можете упаковать /распакуйте его через docker save), вы, вероятно, столкнетесь с ограничениями размера для артефактов, не говоря уже о времени, которое требуется для упаковки / распаковки.

Полагаю, вам было бы лучше, если бы вы создалиDockerfile в своем проекте, и объедините там шаги 1 и 2.В этом случае ваш конвейер bitbucket может быть основан на образе докера, который уже содержит AWS-cli и использует docker в качестве службы, и ваш единственный шаг будет состоять из создания Dockerfile вашего проекта и загрузки в AWS.Это также снижает вашу зависимость от конвейеров bitbucket, так как

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...