Лучшая стратегия для развертывания статического сайта в s3 на github push?

Я хотел бы автоматизировать развертывание нашего сайта на AWS S3. Я написал node script, чтобы автоматизировать создание и загрузку сайта, но я бы хотел, чтобы script автоматически запускался всякий раз, когда ветвь master нашего репо обновляется на github.

Я просмотрел AWS CodeDeploy, но это похоже на то, что специально предназначено для EC2. Я также посмотрел на AWS Lambda, но, похоже, нет четкого способа вытащить копию репо с помощью git, поэтому я могу запустить script.

Любые сервисы (желательно привязанные к AWS), которые я могу использовать?

Ответы

Ответ 1

Вместо использования службы AWS напрямую (как вы говорите, они почти все ожидают гораздо более сложной настройки, развертывания на EC2 и т.д.), вам может быть лучше использовать поставщика CI, например Shippable, Codeship или Wercker.

Все они имеют возможность запускать обновления git, запускать команды сборки, устанавливать утилит в свои изображения/контейнеры CI и копировать файлы на S3.

Вероятно, есть некоторый запуск, который построил точный инструмент для вашей цели, но пока не появился на моем радаре: -)

Ответ 2

Я знаю, что это не git deploy.... Но вместо того, чтобы настраивать ящик CI, я просто использовал s3cmd.

http://s3tools.org/s3cmd

Выполнение этой команды синхронизирует мой каталог с s3.

s3cmd sync -r ~/code/mysite/build s3://www.mysite.com --delete-removed

Я использую его в Linux. Не знаете, каковы их истории OSX и Windows.

Если вы действительно после решения git push, вы можете настроить задание по времени, которое вытаскивает репозиторий git в папку, а затем выполняет это против него. Я делаю это в другом месте на дешевой Linux VM. Если вы не собираетесь идти полным CI, вероятно, не так много.

Ответ 3

У меня была одна и та же цель некоторое время назад, и теперь я выпустил небольшой инструмент, который решает проблему хотя бы для меня. Он использует AWS Lambda и разворачивает конкретную ветвь репозитория до S3 после push. Вы можете в полной мере использовать ключ развертывания GitHub, который имеет меньше разрешений в качестве токенов доступа и может быть настроен для каждого репозитория.

Пожалуйста, посмотрите github-bucket, это тоже может помочь.

github-s3-deploy-architecture

Ответ 4

Если вы используете TravisCI, deployment довольно прямолинейно. Единственной частью, которую вам нужно добавить в свой .travis.yml, является:

deploy:                         
  provider: s3                         
  access_key_id: "YOUR AWS ACCESS KEY"
  secret_access_key:
    secure: "w/DlbHt1+IAMENCRYPTED"
  bucket: "YOUR BUCKET"

Мой пост в блоге объясняет все детали для стороны AWS (настройки пользователя, конфигурации IAM и S3), а также github и сторона travisCI.

Ответ 5

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

На первом этапе трубопровода вытащите из Github и сохраните его на S3. Вы можете легко установить это через консоль AWS.

На следующем шаге CodeDeploy вы можете использовать CLI AWS (предварительно установленный в CodeDeploy), чтобы сделать

cd /path/to/public/directory && aws s3 sync --acl public-read --delete . s3://your.bucket.name

Вам нужно будет установить переменные среды для AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY, чтобы AWS CLI мог запускаться во время вашего шага развертывания, и это также можно сделать в консоли AWS для CodeDeploy в разделе Advanced в разделе "Переменные среды". Как только переменные окружения установлены, и если у этого пользователя AWS есть правильные разрешения, вы можете запустить любую команду aws-cli, которую вы хотите внутри своего CodeDeploy.

Как только это будет сделано, когда вы зарегистрируетесь в Github, начнется CodePipeline, а через несколько минут ваши файлы будут на S3.

Ответ 6

Возможно, вы отказались от вашего простого использования, но вы можете создать очень простой CodePipeline, чтобы подтолкнуть ваш репозиторий github к S3.

Ответ 7

Я также рекомендую использовать код, простой и простой, но вам нужно создать пользователя IAM с соответствующим разрешением (которое является политикой) на ведро S3.

базовый план кодекса бесплатный.

Ну, может быть, проблема в том, что до сих пор я вижу, что код не удалит файлы при удалении файлов в github, ведь s3 не является реестром github, но в любом случае операции putObject для большого количества обновлений github работают достаточно хорошо мне.

Ответ 8

Я использовал Deploy Bot в прошлом, и я был очень доволен этим.

Он может нажать на S3 или даже FTP через Git, а также запустить сценарии сборки и даже нажать на уведомление Slack для вас.

https://deploybot.com/