2

Мне удалось установить интеграцию между github и AWS CodePipeline, так что теперь мой код загружается на S3 после события push функцией лямбда. Это работает очень хорошо.Docker image build as AWS CodePipeline step

Новый ZIP с исходным кодом на S3 запускает конвейер, который строит код. Хорошо. Теперь я хотел бы также создать изображение докера для проекта.

Первой проблемой является то, что вы не можете смешивать сборку проекта (nodejs) и сборку докеров. Это прекрасно, имеет смысл. Следующая проблема заключается в том, что у вас не может быть другого buildspec.yml для сборки докеров. Вы указываете команды сборки вручную, нормально, что работает как обходной путь.

Самая большая проблема, хотя, или отсутствие моего понимания, заключается в том, как поставить докер в качестве части конвейера? Первый этап сборки создает проект, следующий шаг сборки создает изображение докеры. Два автономных AWS CodeBuild.

Дело в том, что этап построения трубопровода должен производить артефакт на выходе. Но сборка докеров не создает каких-либо файлов, и похоже, что окончательная докерная толчка после сборки докеров не квалифицируется как артефакт службы трубопровода.

Есть ли способ, как это сделать?

Thanks

+0

Вы видите эту статью? Я собираюсь проверить это на этой неделе, но из статьи вы используете последний шаг, чтобы подтолкнуть изображение докеров. Надеюсь это поможет. docs.aws.amazon.com/codebuild/latest/userguide/sample-docker.html –

+0

Он работает как самостоятельная сборка, все в порядке. Но если вы ждете его как часть CodePipeline, вы не можете, потому что изображение докера не создает никаких артефактов вывода. Я предполагаю, что я просто поставлю туда что-то, как выход, уродливое обходное решение, но я не нашел другого способа. – stibi

+0

Вы всегда можете просто сохранить zip финального пакета как артефакт, хороший способ иметь автономную сборку изображения докеров. Это был мой план. –

ответ

0

Извините за неудобства. Сделать его менее ограничительным в нашей дорожной карте. Между тем, чтобы использовать действие CodeBuild, вы можете использовать фиктивный файл в качестве выходного артефакта.

+0

Это все еще так? – Nathan

2

Немного поздно, но, надеюсь, будет полезно для кого-то. У вас должно быть изображение докеров, опубликованное как часть ваших фазовых команд post_build. Вот пример buildspec.yml:

version: 0.1 

phases: 
    pre_build: 
    commands: 
     - echo Logging in to Amazon ECR... 
     - $(aws ecr get-login --region $AWS_REGION) 
    build: 
    commands: 
     - echo Build started on `date` 
     - echo Building the Docker image...   
     - docker build -t $IMAGE . 
     - "docker tag $IMAGE $REPO/$IMAGE:${CODEBUILD_BUILD_ID##*:}" 
    post_build: 
    commands: 
     - echo Build completed on `date` 
     - echo Pushing the Docker image... 
     - "docker push $REPO/$IMAGE:${CODEBUILD_BUILD_ID##*:}" 
     - "echo {\\\"image\\\":\\\"$REPO/$IMAGE:${CODEBUILD_BUILD_ID##*:}\\\"} > image.json" 
artifacts: 
    files: 
    - 'image.json' 

Как вы можете видеть, проект CodeBuild ожидает несколько параметров - AWS_REGION, REPO и IMAGE и публикует изображение на AWS ECR (но вы можете использовать реестр по вашему выбору) , Он также использует существующую переменную окружения для извлечения динамического значения для тега изображения. После того, как изображение нажата, он создает json-файл с полным путем к изображению и публикует его как артефакт для CodePepeline для использования.

Для этого для проекта «образ окружающей среды» CodeBuild должен быть тип «докер» с активированным флагом «привилегированный». При создании проекта CodeBuild в вашем конвейере вы также можете указать переменные среды, для которых используется файл buildspec выше.

Существует хороший учебник по этой теме здесь:

http://queirozf.com/entries/using-aws-codepipeline-to-automatically-build-and-deploy-your-app-stored-on-github-as-a-docker-based-beanstalk-application

+1

Имейте в виду, что если какая-либо команда в фазе сборки не работает, команды в фазе post_build ** будут выполняться **. См. [Фазовый переход сборки] (http://docs.aws.amazon.com/codebuild/latest/userguide/view-build-details.html#view-build-details-phases) –