Не удалось выполнить действие AWS CodePipeline - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь подключить репозиторий GitHub к S3, поэтому каждый раз, когда происходит коммит, AWS CodePipeline будет развертывать папку ./<path>/public в указанной S3 bucket.

. Пока в моем конвейереSource работает (подключен к GitHub и получает новые коммиты), но Deploy не удалось, потому что: Action execution failed BundleType must be either YAML or JSON.

Вот как я их настроил:

CodePipeline

  • Имя действия: источник
  • Поставщик действия: GitHub
  • Репозиторий: учетная запись / репо
  • Филиал: мастер
  • GitHub webhooks

CodeDeploy

  • Тип вычислений: AWS Lambda
  • Роль службы: myRole
  • Параметры развертывания: CodeDeployDefault.LambdaAllAtOnce

Роль IAM: myRole

  • Сервис AWS
  • Выберите сервис, который будет использовать эту роль: Lambda / CodeDeploy
  • Выберите вашпример использования: CodeDeploy
  • Политики: AWSCodeDeployRole

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

Обновление

Спасибо @Milan Cermak.Я понимаю, что мне нужно сделать:

CodePipeline:

  • Этап 1: Источник: ловушка с репозиторием GitHub.Этот работает.
  • Этап 2: Сборка: используйте CodeBuild, чтобы получить только нужную папку, используя файл buildspec.yml в корневой папке хранилища.
  • Этап 3: Развертывание: использование
Action Provider: S3
Input Artifacts: OutputArtifacts (result of stage 2).
Bucket: the bucket that hosts the static website.

CodePipeline работает.Однако выходные данные содержат только файлы (.html), а не папки, вложенные в общую папку.

Я проверил this и выяснил, как удалить путь для вложенной папки с помощью discard-paths: yesно я не могу получить все подпапки в папке ./<path>/public.Любое предложение?

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Buildspec для CodeBuild, как указал t_yamo.

Вы используете CodeDeploy, который использует файл appspec.yml, который выглядит примерно так для моей конфигурации.

version: 0.0
os: linux
files:
  - source: /
    destination: /path/to/destination
hooks:
  BeforeInstall:
    - location: /UnzipResourceBundle.sh
  ApplicationStart:
    - location: /RestartServer.sh
      timeout: 3600

UnzipResourceBundle.sh - это просто bash-скрипт, который можно использовать для любых целей.

#!/bin/bash
// Do something

Образец файла AppSpec.yml из документации Amazon можно найти здесь - https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-example.html#appspec-file-example-lambda

0 голосов
/ 01 февраля 2019

Не следует использовать CodeDeploy, поскольку это сервис для автоматизации развертываний приложений, а стоит использовать CodeBuild, который выполняет команды и подготавливает артефакт развертывания для дальнейшего использования в конвейере.

Эти команды находятся вфайл buildspec.yml (обычно в корневом каталоге репозитория, но его можно настроить).Для вашего случая использования это не будет слишком сложно, так как вы ничего не компилируете, не запускаете тесты и т. Д.

Попробуйте это как отправную точку:

version: 0.2

phases:
  build:
    commands:
      - ls

artifacts:
  files:
    - public/*

The *Раздел 1009 * обязателен, поэтому он включен (по крайней мере, благодаря команде ls вы увидите, какие файлы присутствуют в среде CodeBuild), но он не интересен для вашего случая.Что интересно, так это раздел artifacts.Здесь вы определяете, что является выходом фазы CodeBuild, то есть что передается дальше на следующий шаг в конвейере.

В зависимости от того, как вы хотите структурировать файлы (например, хотите ли вы, чтобы каталог public также находился в артефакте, или вы хотите, чтобы файлы были только сами, без родительского каталога)вы можете использовать другую конфигурацию, которая возможна в разделе artifacts.Подробности см. В справочнике buildspec .

Не забудьте использовать выходной артефакт шага CodeBuild в качестве входного артефакта шага Deploy to S3.

0 голосов
/ 01 февраля 2019

CodePipeline недавно объявил о действии развертывания на S3: https://aws.amazon.com/about-aws/whats-new/2019/01/aws-codepipeline-now-supports-deploying-to-amazon-s3/

0 голосов
/ 31 января 2019

CodeBuild использует buildspec, но CodeDeploy использует appspec.

Есть ли файл appspec?

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