CodePipeline buildspec и несколько действий сборки

Простая спецификация сборки, например:

version: 0.2

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml

artifacts:
  type: zip
  files:
    - SkynetLambdaPackaged.yml

Работает нормально, когда у меня есть одно действие на стадии сборки. Но что, если я хочу иметь больше действий сборки, например: я хочу параллельно собирать свой api-сервер и файлы внешнего интерфейса. Как мне это смоделировать?

ОБНОВЛЕНИЕ

В CodePipeline я могу создавать действия, которые выполняются параллельно, как показано ниже, как это моделируется в buildspec? Или это невозможно?

введите здесь описание изображения


person Jiew Meng    schedule 03.09.2017    source источник
comment
Это уже не так, пожалуйста, получайте последние обновления об AWS CodeBuild, где вы можете добавить несколько этапов сборки в свой AWS CodePipeline создать-несколько-сборок-из-того-же-источника-с использованием-разных-aws-codebuild -build-файлы-спецификации   -  person Percy Mohale    schedule 16.01.2021


Ответы (2)


Вы можете использовать два разных проекта CodeBuild из одного источника в качестве двух отдельных параллельных действий в вашем CodePipeline.

Для этого вы можете использовать два buildspec файла в своем источнике.

e.g.

buildspec-frontend.yml

phases:
  install:
    commands:
      - (cd frontend/src; npm run build)
      - aws s3 sync frontend/dist s3://<insert s3 bucket url here>/ --delete 

buildspec-backend.yml

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml

Затем создайте внешний проект CodeBuild, который использует спецификацию сборки внешнего интерфейса. Повторите для серверной части.

Затем, когда вы перейдете на этап Build в CodePipeline, используйте два проекта CodeBuild как параллельные действия.


Обновление: приведенная ниже информация теперь неактуальна, поскольку я неправильно понял вопрос.

Если ваш интерфейс можно развернуть на s3, просто добавьте его команды развертывания туда, где вы помещаете свои команды развертывания api.

e.g.

phases:
  install:
    commands:
      - (cd lambda/src; npm install)
      - aws cloudformation package --template-file lambda/sam.yml --s3-bucket skynet-lambda --output-template-file SkynetLambdaPackaged.yml
      - (cd frontend/src; npm run build)
      - aws s3 sync frontend/dist s3://<insert s3 bucket url here>/ --delete

Если ваш интерфейс не на s3, просто замените эти строки своими собственными командами развертывания внешнего интерфейса.

CodeBuild выполняет эти команды последовательно. Если вам действительно нужно запускать их параллельно, есть много способов сделать это.

Я предпочитаю помещать команды в Makefile и вызывать их из вашего buildspec.yml (например, make --jobs 2 backend frontend).

person Noel Llevares    schedule 03.09.2017
comment
Но это будет запускать команды последовательно правильно? Я думаю, что лучше делать это как отдельные действия, чтобы запускать их параллельно? - person Jiew Meng; 04.09.2017
comment
Каждая фаза в спецификации сборки выполняется последовательно, а не параллельно. docs.aws. amazon.com/codebuild/latest/userguide/ - person Noel Llevares; 04.09.2017
comment
@JiewMeng Я знаю, что этапы CodePipeline могут иметь параллельные действия. Я не думаю, что CodeBuild поддерживает это. Можете ли вы указать на какие-нибудь документы, подтверждающие это? Это будет полезно и для меня. - person Noel Llevares; 05.09.2017
comment
Да, вот оно: docs.aws.amazon.com/codepipeline/ latest / userguide / actions.html. Образ действий параллельно есть в обновлении ОП - person Jiew Meng; 05.09.2017
comment
Я вижу, в чем путаница. Как я уже упоминал, CodePipeline может иметь параллельные действия. CodePipeline НЕ использует buildspec.yml. CodeBuild делает. CodeBuild последовательно выполняет этапы построения спецификации. - person Noel Llevares; 06.09.2017
comment
Как указать разные файлы yml для каждой сборки? У меня есть только возможность выбрать файл buildspec.yml. - person ChrisO; 22.09.2017
comment
@ChrisO Пример: aws.amazon.com/blogs/devops/ - person Noel Llevares; 23.09.2017

введите здесь описание изображения Насколько я понимаю, если у вас есть только один источник, у вас не может быть two buildspec, потому что вы можете назвать этот файл только buildspec. Возможно, вы можете попробовать опцию «Вставить команды сборки»

person R.Min    schedule 06.09.2017
comment
Это уже не так, и вы можете назвать файл buildspec по своему вкусу. - person Rohit; 28.11.2018