Как запустить параллельную сборку с AWS Codebuild? - PullRequest
1 голос
/ 19 июня 2019

Я пытаюсь настроить сборку кода, где у меня есть один модуль, который будет создавать зависимости для других сборок. И эти другие сборки будут использовать артефакты, генерируемые первой сборкой, и эти сборки должны выполняться параллельно. Я смотрел на документацию CodeBuild, кажется, там нет информации. Пример моего buildspec.yml

version: 0.2

#env:
  #variables:
     # key: "value"
     # key: "value"
  #parameter-store:
     # key: "value"
     # key: "value"
  #git-credential-helper: yes

phases:
  #install:
    #If you use the Ubuntu standard image 2.0 or later, you must specify runtime-versions.
    #If you specify runtime-versions and use an image other than Ubuntu standard image 2.0, the build fails.
    #runtime-versions:
      # name: version
      # name: version
    #commands:
      # - command
      # - command
#  pre_build:
#    commands:
#       - mkdir artifacts
#       - pwd
#       - ls
  build:
    commands:
       - cd frontend
       - npm install
       - cd ..
       - cd othermodule
       - npm install
  #post_build:
    #commands:
     #  - cp -a $CODEBUILD_SRC_DIR/frontend/dist. 
      # - command
artifacts:
  files:
     - package-lock.json
     - node_modules/*
  base-directory: frontend
#cache:
  #paths:
    # - paths

1 Ответ

2 голосов
/ 19 июня 2019

CodeBuild используется для автоматизации этапа сборки, а не для автоматизации всего процесса CICD.В CodeBuild вы указываете buildspec.yml для автоматизации последовательности шагов, которые необходимо выполнить в этой конкретной сборке.

Если вам нужно автоматизировать последовательность сборок, то самый простой вариант, который у вас есть, это использовать CodePipeline гдеВы можете создать этап для каждого шага в вашем процессе CICD.В вашем случае это будет означать, что одним шагом (этапом) будет действие CodeBuild, которое вы описали в своем посте, которое перейдет в другой этап, где вы можете указать другие действия CodeBuild, и эти действия можно указать для получения артефактов из предыдущего шага.в качестве входных данных, и вы можете запускать их параллельно.

Таким образом, это выглядело бы так:

INPUT -> STAGE (выполнить начальную сборку) -> STAGE (указать несколько действий по сборке параллельно - в консоли, это можно сделать, поместив их рядом друг с другом по горизонтали, а не по вертикали )

Другой вариант, без использования CodePipeline, будет использовать функцию Lambda с событиями CloudWatch.CodeBuild публикует событие после завершения сборки.Вы можете подписать функцию Lambda на это событие и написать код, который будет выполнять следующие сборки при необходимости.

...