web-dev-qa-db-fra.com

Quelle est la meilleure stratégie pour déployer un site statique sur s3 lors du push de github?

J'aimerais automatiser le déploiement de notre site sur AWS S3. J'ai écrit un script de noeud pour automatiser la construction et le téléchargement du site, mais j'aimerais que le script soit automatiquement exécuté chaque fois que la branche master de notre référentiel est mise à jour sur github.

J'ai examiné AWS CodeDeploy, mais il semble que ce soit spécifiquement pour le déploiement sur EC2. J'ai également examiné AWS Lambda, mais il ne semble pas exister de solution claire pour extraire une copie du référentiel à l'aide de git afin que je puisse exécuter le script.

Tous les services (de préférence liés à AWS) que je peux utiliser?

25
Mike Douglas

Plutôt que d'utiliser directement un service AWS (comme vous le dites, ils s'attendent presque tous à une configuration beaucoup plus compliquée, au déploiement sur EC2, etc.), vous feriez peut-être mieux d'utiliser un fournisseur de CI tel que Shippable , Codeship ou Wercker .

Ils ont tous la possibilité de se lancer à partir de mises à jour git, d'exécuter des commandes de construction, d'installer des utilitaires dans leurs images/conteneurs d'éléments de configuration et de copier des fichiers sur S3.

Il y a probablement une start-up qui a construit un outil exact pour vous, mais ils ne sont pas encore apparus sur mon radar :-)

10
ocean

J'avais le même objectif il y a quelque temps et je viens de publier un petit outil qui résout le problème du moins pour moi. Il utilise AWS Lambda et déploie une branche spécifique du référentiel sur S3 après Push. Vous pouvez tirer pleinement parti de la clé de déploiement GitHub, qui a moins d'autorisations que les jetons d'accès personnel et peut être configurée par référentiel.

S'il vous plaît jetez un oeil à github-seau , cela pourrait vous aider aussi.

 github-s3-deploy-architecture

11
Matthias Rosenstock

Je sais que ce n'est pas git deploy .... Mais au lieu de mettre en place une CI Box, je viens d'utiliser s3cmd. 

http://s3tools.org/s3cmd

L'exécution de cette commande synchronise mon répertoire de construction avec s3.

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

Je l'utilise sous Linux. Pas sûr de ce que leurs histoires OSX et Windows sont.

Si vous recherchez vraiment une solution git Push, vous pouvez configurer un travail chronométré qui extrait votre dépôt Git dans un dossier, puis l'exécute en même temps. Je le fais ailleurs sur une machine virtuelle Linux bon marché. À moins que vous n'ayez à vous en sortir complètement, il n'y a probablement pas de raison d'être.

8
Damien Sawyer

Si vous utilisez TravisCI, le deployment est assez simple. La seule partie que vous devrez ajouter à votre .travis.yml est la suivante:

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

Mon article de blog explique tous les détails du côté AWS (configuration de l'utilisateur, configurations des compartiments IAM et S3) ainsi que du côté de github et de travisCI.

6
Michal Frystacky

Vous pouvez configurer cela avec un très simple CodePipeline en 2 étapes. En gros, vous venez de remplir les différentes sections de la console AWS. Il n'est pas nécessaire d'avoir un outil de CI distinct et sa complexité accrue.

Dans la première étape de la ligne, tirez de Github et stockez-le en S3. Vous pouvez facilement configurer cela via la console AWS.

Dans l'étape suivante de CodeDeploy, vous pouvez utiliser l'AWS CLI (préinstallée dans CodeDeploy) pour effectuer une

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

Vous devrez définir les variables d'environnement pour AWS_ACCESS_KEY_ID et AWS_SECRET_ACCESS_KEY afin que l'AWS CLI puisse s'exécuter pendant votre étape de déploiement, et cela peut également être effectué dans la console AWS pour CodeDeploy, dans la section Avancé de "variables d'environnement". Une fois les variables d'environnement définies et si cet utilisateur AWS dispose des autorisations appropriées, vous pouvez exécuter la commande aws-cli de votre choix dans CodeDeploy. 

Une fois que cela est fait, lorsque vous vous enregistrez sur Github, CodePipeline démarre et, quelques minutes plus tard, vos fichiers seront sur S3.

5
Patrick Chu

Peut-être maîtrisé pour votre cas d'utilisation simple, mais vous pouvez créer un très simple CodePipeline pour pousser votre référentiel github vers S3.

1
Dave Maple

je recommande également d'utiliser codage, simple et facile, mais vous devez créer un utilisateur IAM avec l'autorisation appropriée (qui est la politique) pour le compartiment S3.

le plan de base pour le codage est gratuit. 

Il se peut qu’il y ait un problème jusqu’à présent, je peux voir que codet ne supprimera pas les fichiers car vous supprimez des fichiers dans github. Après tout, s3 n’est pas un dépôt github, mais de toute façon, les opérations putObject pour de nombreuses mises à jour de github me suffisent.

0
Gabriel Wu

J'ai déjà utilisé Deploy Bot par le passé et j'en ai été très heureux. 

Il peut pousser à S3 ou même FTP via Git et aussi exécuter vos scripts de construction et même envoyer une notification à Slack pour vous 

https://deploybot.com/

0
Anthony Delgado