AWS CodeBuild buildspec.yml рекурсивно получает все файлы и подпапки - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь использовать AWS CodeBuild, чтобы получить все файлы и подпапки во вложенной папке public и развернуть их в корзину S3 с помощью CodePipeline.Я смог соединить их все вместе, но изо всех сил пытался настроить файл buildspec.yml, чтобы получить желаемый вывод.

Структура моей папки:

<path>/public/

├── 404.html
├── css
│   ├── ...
├── fonts
│   ├── bootstrap
│   │   ├── ...
│   ├── icomoon
│   │   ├── icomoon
│   │   │   ├── ...
│   └── simple-line-icons
│       ├── ...
├── images
│   ├── ...
├── index.html
├── index.xml
├── js
│   ├── ...
└── tags
    └── index.xml

Мне нужно положить все (включаяподпапки) внутри папки public в корне корзины S3.

До сих пор я пытался следовать документам здесь , здесь и здесь .Я пытался использовать:

  • **/* для рекурсивного получения всего содержимого внутри папки public, но в корзине S3 будет путь к папке, поэтому index.html не находится в корневом каталоге.
  • discard-paths: yes для удаления пути к папке public, но внутри корзины S3 все файлы находятся в корне, структура подпапок не сохраняется.
  • base-directory: как описано здесь .
  • artifacts: secondary-artifacts: artifact1: files: - directory/file artifact2: files: - directory/file2, чтобы сохранить структуру папок, но моя сборка не удалась.
  • Различные комбинации всех синтаксисов выше, но моя сборка просто не удалась.

Ответы [ 2 ]

0 голосов
/ 12 июля 2019

Я столкнулся с подобной проблемой, и после многих перестановок ниже синтаксис работал для меня.

artifacts:
  files:
    - './**/*'
  base-directory: public
  name: websitename
0 голосов
/ 01 февраля 2019

Я нашел способ обойти это.Я не думаю, что это лучший способ, но он работает.Я надеюсь, что вы найдете это решение полезным buildspec.yml:

version: 0.2

phases:
  build:
    commands:
      - mkdir build-output
      - cp -R <path>/public/ build-output
  post_build:
    commands:
      - mv build-output/**/* ./
      - mv build-output/* ./
      - rm -R build-output *.yml LICENSE README* .git*
artifacts:
  files:
    - '**/*'

Словами:

  • Я копирую все содержимое вложенной папки <path>/public в папкуназывается ./build-output.

  • Затем в post_build я перемещаю все из папки build-output.

  • Удаляет файлы, извлеченные из репозитория моего GitHub, которые не являютсянеобходимо разместить статический веб-сайт в S3 bucket

  • Тогда я получу желаемый результат: все файлы внутри public в корне S3 bucket с правильным деревом папок.

Обновление:

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