Publier sur S3 avec Git?

87

Est-ce que quelqu'un sait comment faire ça? Jusqu'à présent, je n'ai rien trouvé d'utile via Google.

J'aimerais vraiment configurer un dépôt local et l'utiliser git pushpour le publier sur S3, l'idée étant d'avoir un contrôle de version local sur les actifs mais un stockage à distance sur S3.

Est-ce possible et si oui comment?

Andrew
la source
1
OP, Actuellement, la réponse acceptée ne s'applique pas à la question posée. Serait-il possible de mettre à jour pour le plus grand bien? Je pense que s3fsc'est une solution viable.
bnjmn
1
@Benjamin Merci d'avoir rappelé mon attention sur celui-ci, il est mis à jour.
Andrew
Ne serait-il pas logique de déployer sur n'importe quel référentiel distant (pour conserver un historique de sauvegarde des commits) et d'utiliser un hook git pour simplement se synchroniser avec un compartiment S3 (par exemple:) s3cmd sync …?
Fabien Snauwaert

Réponses:

50

1 Utilisez JGit via http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html

Téléchargez jgit.sh, renommez-le en jgit et placez-le dans votre chemin (par exemple $ HOME / bin).

Configurez le fichier de configuration .jgit et ajoutez ce qui suit (en remplaçant vos clés AWS):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Notez qu'en ne spécifiant pas acl: public dans le fichier .jgit, les fichiers git sur S3 seront privés (ce que nous voulions). Ensuite, créez un compartiment S3 pour stocker votre référentiel, appelons-le git-repos, puis créez un référentiel git à télécharger:

s3cmd mb s3://git-repos
mkdir chef-recipes
cd chef-recipes
git init
touch README
git add README
git commit README
git remote add origin amazon-s3://.jgit@git-repos/chef-recipes.git

Dans ce qui précède, j'utilise l'outil de ligne de commande s3cmd pour créer le seau, mais vous pouvez également le faire via l'interface Web d'Amazon. Maintenant, poussons-le jusqu'à S3 (notez comment nous utilisons jgit chaque fois que nous interagissons avec S3, et git standard sinon):

jgit push origin master

Maintenant, allez ailleurs (par exemple cd / tmp) et essayez de le cloner:

jgit clone amazon-s3://.jgit@git-repos/chef-recipes.git

Quand vient le temps de le mettre à jour (car jgit ne prend pas en charge la fusion ou l'extraction), vous le faites en 2 étapes:

cd chef-recipes
jgit fetch
git merge origin/master

2 Utilisez un système de fichiers basé sur FUSE soutenu par Amazon S3

  1. Obtenez un compte Amazon S3!

  2. Téléchargez, compilez et installez. (voir Notes d'installation)

  3. Spécifiez vos informations d'identification de sécurité (ID de clé d'accès et clé d'accès secrète) par l'une des méthodes suivantes:

    • utilisation de l'option de ligne de commande passwd_file

    • définition des variables d'environnement AWSACCESSKEYID et AWSSECRETACCESSKEY

    • en utilisant un fichier .passwd-s3fs dans votre répertoire personnel

    • en utilisant le fichier système / etc / passwd-s3fs

    • fais ça

.

/usr/bin/s3fs mybucket /mnt

C'est ça! le contenu de votre bucket amazon "mybucket" devrait maintenant être accessible en lecture / écriture dans / mnt

Boulette de riz LEE
la source
1
J'ai suivi ces instructions mais j'obtiens une The request signature we calculated does not match the signature you provided. Check your key and signing methoderreur lorsque j'essaye de le faire jgit push origin master. Une idée de comment je peux faire disparaître cela?
john
4
Pourquoi n'utiliseriez-vous pas simplement git? Cela semble être beaucoup de travail / trucs supplémentaires juste pour un simple repo git distant sur aws ...
cmcculloh
1
Je suggérerais de mettre à jour cette (vraie) réponse pour aller encore plus loin avec un post-receivehook qui vérifie le GIT_WORK_TREE. Voir ici pour plus de détails. J'ai fini par faire fonctionner cela très bien avec s3fs. Je le recommande vivement et merci de m'avoir aidé à démarrer.
bnjmn
1
@cmculloh si vous n'avez pas déjà d'instance EC2, cela peut être plus problématique et coûter à long terme juste pour avoir un dépôt git. Le stockage S3 est également beaucoup plus durable par défaut; pour obtenir la même durabilité sur EC2, vous devez quand même sauvegarder des instantanés jusqu'à S3
Jeremy
1
Il semble que le billet de blog a été mis à jour pour rendre la page du projet jgit un lien vers le référentiel du projet egit [eclipse.org/egit/ ] et cela rend l'ensemble de la solution 1 déroutant. Après une petite recherche, j'ai pu trouver la page originale du projet jgit à partir de laquelle jgit.sh peut être téléchargé et utilisé. Le lien est eclipse.org/jgit/download pour tous ceux qui pourraient en avoir besoin à l'avenir.
MN Islam Shihan
9

Dandelion est un autre outil CLI qui maintiendra les référentiels Git synchronisés avec S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion

scttnlsn
la source
Aucune idée de qui a voté contre cela. Je pense que cette solution est bonne si l'objectif est d'avoir des déploiements incrémentiels aux côtés de git pour la gestion des versions locales et S3 pour l'hébergement. Voilà ce qui semble être la question.
Tabrez le
8

git-s3 - https://github.com/schickling/git-s3

Tu dois juste courir git-s3 deploy

Il est livré avec tous les avantages d'un dépôt git et télécharge / supprime uniquement les fichiers que vous avez modifiés.
Remarque: les déploiements ne sont pas implicites via git push mais vous pouvez y parvenir via un hook git.

schickling
la source
14
FYI, cela dépend de Composer, qui à son tour dépend de PHP.
Maarten
3

Vous pouvez utiliser le client mc aka Minio , il est écrit en Golang et disponible sous licence Open Source Apache. Il est disponible pour Mac, Linux, Windows, FreeBsd. Vous pouvez utiliser la mc mirrorcommande pour répondre à vos besoins.

Téléchargement mc GNU / Linux

64-bit Intel from https://dl.minio.io/client/mc/release/linux-amd64/mc
32-bit Intel from https://dl.minio.io/client/mc/release/linux-386/mc
32-bit ARM from https://dl.minio.io/client/mc/release/linux-arm/mc
$ chmod +x mc
$ ./mc --help

Configuration de mc pour Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Remplacez par votre clé d'accès / secrète
  • Par défaut, mc utilise la version 4 de signature d'Amazon S3.
  • mys3 est l'alias Amazon S3 pour le client minio

Mettez en miroir votre référentiel / répertoire local github, dites le nommygithub au nom du compartiment Amazon S3mygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

J'espère que cela aide Disclaimer: je travaille pour Minio

koolhead17
la source
3

Vous pouvez également le faire à l'aide de l'AWS CLI et de Git (avec des hooks). Vérifié fonctionnant sous Windows 10. Devrait fonctionner sous Linux / Mac.

Configuration de la synchronisation avec S3 lors de la validation

  1. Installez l'AWS CLI
  2. Configurez les informations d'identification d'accès par programme IAM (vous pouvez vous limiter à S3 et même au compartiment uniquement).
  3. Configurer l'AWS CLI avec les informations d'identification
  4. Créez le compartiment S3 dans la console AWS ou sur l'interface de ligne de commande.
  5. Assurez-vous que le compartiment est privé.
  6. Créez un nouveau bareréférentiel git de votre projet git existant:
mkdir myproject.git
cd myproject.git
git init --bare

REMARQUE: l'utilisation d'un dépôt nu servira d'amont et le dépôt nu n'aura que les modifications que vous souhaitez télécharger dans le compartiment S3 et non les fichiers ignorés, les configurations git locales, etc.

  1. Installez ce hook comme post-updatedans hooksle myproject.gitrépertoire nu .
    #!/bin/sh; C:/Program\ Files/Git/usr/bin/sh.exe
    # Sync the contents of the bare repo to an S3 bucket.
    aws s3 sync . s3://myproject/
    
  2. Mettez à jour le hook avec le nom de compartiment S3 correct.
  3. Maintenant, cd dans votre myprojectrépertoire et ajoutez le dépôt nu en amont, nommez-le s3par exemple:
git remote add s3 path/to/bare/directory/myproject.git 

REMARQUE: vous pouvez utiliser un chemin relatif pour le chemin d'accès au répertoire nu.

Essai

  1. Ajoutez des modifications à votre dépôt et validez.
  2. Poussez vos modifications en s3amont lorsque vous souhaitez synchroniser les modifications dans votre compartiment S3.
  3. Vous devriez voir les modifications synchronisées avec le compartiment S3 que vous avez spécifié, vous pouvez également afficher les modifications dans le compartiment S3 pour vérifier que tout a fonctionné.

Références:

b01
la source
C'est OK si vous avez déjà AWS CLI et Git déjà installés. Cela suppose une connaissance Git des hooks, que vous savez comment configurer les utilisateurs IAM et les informations d'identification par programmation et créer des compartiments S3.
b01
Alors, est-ce que je comprends correctement que cela a deux dépôts localement et que le dépôt local nu est configuré pour se synchroniser avec s3 via la post-mise à jour?
Josiah
@ Josiah Oui, c'est exact. Bien que ce ne soit pas nécessaire, cela permet de simplifier la synchronisation uniquement des fichiers que vous voulez dans S3, puisque le dépôt nu ne contiendra que les fichiers qui sont validés. J'ai essayé cela sans le repo nu, mais j'ai ensuite dû exclure certains fichiers de la synchronisation avec S3, notamment tout ce qui se trouvait dans le fichier .gitignore.
b01 le
1

Vous pouvez utiliser le service deplybot ( http://deploybot.com/ ) qui est gratuit pour un référentiel git unique.

Vous pouvez automatiser le déploiement en choisissant «automatique» dans la section du mode de déploiement.

Je l'utilise maintenant. C'est très simple et utile.

Jayaprakash
la source
Plus gratuit.
mxcl
-1

contrôler la version de vos fichiers avec Github? Ce script (et ses configurations GitHub / AWS associées) prendra de nouveaux commits dans votre dépôt et les synchronisera dans votre compartiment S3.

https://github.com/nytlabs/github-s3-deploy

Max Hodges
la source
-1

Vous avez besoin de JGit pour cela.

Enregistrez simplement un fichier .jgit dans le répertoire utilisateur avec les informations d'identification aws et vous pouvez utiliser git avec s3.

Voici à quoi ressemblera votre URL git.

amazon-s3://.jgit@mybucket/myproject.git

Vous pouvez faire tout ce que vous faites gitavec jgit.

Obtenez un guide d'installation complet ici.

https://metamug.com/article/jgit-host-git-repository-on-s3.html

Trieur
la source