CodeBuild - множественные входные артефакты в AWS Pipeline

12

Я строю AWS CodePipeline, которая зависит от двух исходных репозиториев. Если шаг «CodeBuild» задается множеством входных артефактов, то вы получите сообщение об ошибке: .. declares 2 input artifacts which is more than the maximum count. Документация имеет строгое требование, чтобы CodeBuild имел только один входной артефакт.

Лямбды, с другой стороны, не имеют этого ограничения. Я искал способ, которым Lambda могла бы «объединить» два артефакта в один, который я мог бы затем передать CodeBuild. К сожалению, информация на эту тему довольно ограничена.

У кого-нибудь есть работающая CodePipeline Lambda, которая объединит два Артефакта в один?

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

Примечание : документация о том, как получить доступ к артефактам .

romaninsh
источник

Ответы:

6

У нас была точно такая же проблема - наша стадия сборки должна использовать информацию из двух разных мест.

Чтобы решить эту проблему в общих чертах, я создал две лямбды общего назначения - одну, которая объединит артефакты, и одну, которая извлечет определенные файлы из артефакта. В обоих случаях создается новый артефакт, который можно передать на следующий этап CodePipeline.

См. Https://github.com/tooltwist/codepipeline-artifact-munge.

Если он не соответствует вашим точным требованиям, его достаточно легко настроить, чтобы сделать то, что вам нужно.

Филипп Каллендер
источник
Отличная работа, Филипп, спасибо, что поделились этой лямбдой.
Романиньш
4

На самом деле я решил проблему, клонировав репозиторий непосредственно в codebuild:

Передайте токен GitHub:

      - { Name: GITHUB_TOKEN, Value: {Ref: GitHubToken } }
      - { Name: GITHUB_BRANCH, Value: {Ref: GitHubBranch } }

# Выполните git clone на этапе установки:

      - git clone --single-branch --depth=1 -b $GITHUB_BRANCH https://gitorgname:$GITHUB_TOKEN@github.com/gitorgname/reponame.git  src/reponame

Я обнаружил, что это решение проще в реализации, не зависит от Lambdas и, хотя выполняет две операции, работает довольно надежно.

romaninsh
источник
Где именно вы положили - {Имя ...}?
Алекс Р
Я создаю CodeBuild с помощью облачной информации, но это переменная среды, которую вы также можете указать через консоль.
Романиньш
2

С 4 сентября 2018 года Amazon добавила поддержку нескольких источников ввода:

https://aws.amazon.com/about-aws/whats-new/2018/08/aws-codebuild-adds-ability-to-create-build-projects-with-multiple-input-sources-and-output- артефакты /

Из документации :

{
"name": "sample-project",
"source": {
  "type": "S3",
  "location": "bucket/sample.zip"
},
"secondarySources": [
  {
    "type": "CODECOMMIT",
    "location": "https://git-codecommit.us-west-2.amazonaws.com/v1/repos/repo"
    "sourceIdentifier": "source1"
  },
  {
    "type": "GITHUB",
    "location": "https://github.com/awslabs/aws-codebuild-jenkins-plugin"
    "sourceIdentifier": "source2"
  }
],

version: 0.2

phases:
  build:
    commands:
      - cd $CODEBUILD_SRC_DIR_source1
      - touch file1
      - cd $CODEBUILD_SRC_DIR_source2
      - touch file2

artifacts:
  secondary-artifacts:
    artifact1:
      base-directory: $CODEBUILD_SRC_DIR_source1
      files:
        - file1
    artifact2:
      base-directory: $CODEBUILD_SRC_DIR_source2
      files:
        - file2
romaninsh
источник
-1

Вы можете просмотреть CodeBuild. Файл BuildScpec можно поместить в проект CodeBuild.CodeBuild Project

darangom
источник
3
Я не вижу, как это ответить на вопрос.
Тенсибай