Pubblicare su S3 usando Git?


89

Qualcuno sa come fare questo? Finora non sono riuscito a trovare nulla di utile tramite Google.

Mi piacerebbe davvero configurare un repository locale e utilizzarlo git pushper pubblicarlo su S3, l'idea è di avere il controllo della versione locale sulle risorse ma l'archiviazione remota su S3.

Può essere fatto e, in caso affermativo, come?


1
OP, Attualmente la risposta accettata non si applica alla domanda posta. Sarebbe possibile aggiornare per un bene maggiore? Credo s3fssia una soluzione praticabile.
bnjmn

1
@ Benjamin Grazie per aver richiamato la mia attenzione su questo, è aggiornato.
Andrew

Non avrebbe senso distribuire a qualsiasi repository remoto (per preservare una cronologia di backup dei commit) e utilizzare un hook git per sincronizzarsi semplicemente con un bucket S3 (ad esempio:) s3cmd sync …?
Fabien Snauwaert

Risposte:


50

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

Scarica jgit.sh, rinominalo in jgit e inseriscilo nel tuo percorso (ad esempio $ HOME / bin).

Imposta il file di configurazione .jgit e aggiungi quanto segue (sostituendo le tue chiavi AWS):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Nota, non specificando acl: public nel file .jgit, i file git su S3 saranno privati ​​(che è quello che volevamo). Quindi crea un bucket S3 in cui archiviare il tuo repository, chiamiamolo git-repos, quindi crea un repository git da caricare:

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

In precedenza sto usando lo strumento da riga di comando s3cmd per creare il bucket, ma puoi farlo anche tramite l'interfaccia web di Amazon. Ora spingiamolo fino a S3 (nota come usiamo jgit ogni volta che interagiamo con S3 e git standard altrimenti):

jgit push origin master

Ora vai da qualche altra parte (ad esempio cd / tmp) e prova a clonarlo:

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

Quando arriva il momento di aggiornarlo (perché jgit non supporta l'unione o il pull) lo fai in 2 passaggi:

cd chef-recipes
jgit fetch
git merge origin/master

2 Utilizza il file system basato su FUSE supportato da Amazon S3

  1. Ottieni un account Amazon S3!

  2. Scarica, compila e installa. (vedi Note di installazione)

  3. Specifica le tue credenziali di sicurezza (ID chiave di accesso e chiave di accesso segreta) con uno dei seguenti metodi:

    • utilizzando l'opzione della riga di comando passwd_file

    • impostazione delle variabili di ambiente AWSACCESSKEYID e AWSSECRETACCESSKEY

    • utilizzando un file .passwd-s3fs nella directory home

    • utilizzando il file / etc / passwd-s3fs a livello di sistema

    • Fai questo

.

/usr/bin/s3fs mybucket /mnt

Questo è tutto! il contenuto del tuo bucket Amazon "mybucket" dovrebbe ora essere accessibile in lettura / scrittura in / mnt


1
Ho seguito queste indicazioni ma ricevo un The request signature we calculated does not match the signature you provided. Check your key and signing methoderrore quando provo a farlo jgit push origin master. Qualche idea su come posso farlo andare via?
giovanni

4
Perché non dovresti usare git? Sembra un sacco di lavoro / roba extra solo per un semplice repository git remoto su aws ...
cmcculloh

1
Suggerirei di aggiornare questa (reale) risposta per fare un ulteriore passo avanti con un post-receivehook che controlla il file GIT_WORK_TREE. Vedi qui per maggiori dettagli. Ho finito per farlo funzionare abbastanza bene s3fs. Altamente raccomandato e grazie per avermi aiutato a iniziare.
bnjmn

1
@cmculloh se non disponi già di un'istanza EC2, potrebbe essere più problematico e avere un costo a lungo termine solo per avere un repository git. Anche l'archiviazione S3 è molto più durevole per impostazione predefinita; per ottenere la stessa durata su EC2 dovresti comunque supportare gli snapshot fino a S3
Jeremy

1
Sembra che il post del blog sia stato aggiornato per fare in modo che la pagina del progetto jgit si colleghi al repository del progetto egit [ eclipse.org/egit/] e questo rende l'intera soluzione 1 confusa. Dopo un po 'di ricerca sono riuscito a trovare la pagina del progetto jgit originale da cui è possibile scaricare e utilizzare jgit.sh. Il collegamento è eclipse.org/jgit/download per chiunque ne abbia bisogno in futuro.
MN Islam Shihan

9

Dandelion è un altro strumento CLI che manterrà i repository Git sincronizzati con S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion


Non ho idea di chi abbia votato negativamente. Penso che questa soluzione sia buona se l'obiettivo è avere distribuzioni incrementali insieme a git per la gestione delle versioni locali e S3 per l'hosting. Questa è quella che sembra essere la domanda.
Tabrez

8

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

Devi solo correre git-s3 deploy

Viene fornito con tutti i vantaggi di un repository git e carica / elimina solo i file che hai modificato.
Nota: le distribuzioni non sono implicite tramite git push ma è possibile ottenerle tramite un hook git.


14
Cordiali saluti, questo dipende da Composer, che a sua volta dipende da PHP.
Maarten,

3

Puoi usare mc aka client Minio , è scritto in Golang e disponibile con licenza Open Source Apache. È disponibile per Mac, Linux, Windows, FreeBsd. Puoi usare il mc mirrorcomando per soddisfare le tue esigenze.

mc GNU / Linux Scarica

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

Configurazione di mc per Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Sostituisci con la tua chiave di accesso / segreta
  • Per impostazione predefinita, mc utilizza la versione 4 della firma di amazon S3.
  • mys3 è l'alias Amazon S3 per il client minio

Rispecchia il tuo repository / directory locale GitHub, dì il nomemygithub al nome del bucket S3 di Amazonmygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Spero che aiuti Disclaimer: lavoro per Minio


3

Puoi farlo anche utilizzando AWS CLI e Git (con hook). Verificato il funzionamento su Windows 10. Dovrebbe funzionare su Linux / Mac.

Imposta la sincronizzazione con S3 al momento del commit

  1. Installa AWS CLI
  2. Imposta le credenziali di accesso programmatico IAM (puoi limitare a S3 e anche solo al bucket).
  3. Configura AWS CLI con le credenziali
  4. Crea il bucket S3 nella console AWS o nella CLI.
  5. Assicurati che il bucket sia privato.
  6. Crea un nuovo barerepository git del tuo progetto git esistente:
mkdir myproject.git
cd myproject.git
git init --bare

NOTA: l'utilizzo di un repository semplice servirà come upstream e il repository nudo avrà solo le modifiche che si desidera caricare nel bucket S3 e non i file ignorati, le configurazioni git locali, ecc.

  1. Installa questo hook come post-updatenella directory hooksnuda myproject.git.
    #!/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. Aggiorna l'hook con il nome del bucket S3 corretto.
  3. Ora cd nella tua myprojectdirectory e aggiungi il repository nudo come upstream, chiamalo s3ad esempio:
git remote add s3 path/to/bare/directory/myproject.git 

NOTA: è possibile utilizzare un percorso relativo per il percorso della directory nuda.

Test

  1. Aggiungi modifiche al tuo repository e invia.
  2. Esegui il push delle modifiche s3all'upstream quando desideri sincronizzare le modifiche al tuo bucket S3.
  3. Dovresti vedere le modifiche sincronizzate con il bucket S3 che hai specificato, puoi anche visualizzare le modifiche nel bucket S3 per verificare che tutto abbia funzionato.

Riferimenti:


Questo va bene se hai già AWS CLI e Git già installati. Si presuppone che Git conosca gli hook, che tu sappia come configurare utenti IAM e credenziali programmatiche e creare bucket S3.
b01

Quindi capisco correttamente che questo ha due repository localmente e il repository locale nudo è configurato per sincronizzarsi con s3 tramite post-aggiornamento?
Josiah

@ Josiah Sì, è corretto. Sebbene non sia necessario, aiuta a semplificare la sincronizzazione solo dei file desiderati in S3, poiché il repository nudo conterrà solo i file che sono stati salvati. Ho provato questo senza il repository nudo, ma poi ho dovuto escludere alcuni file dalla sincronizzazione con S3, in particolare qualsiasi cosa nel file .gitignore.
b01

1

È possibile utilizzare il servizio deplybot ( http://deploybot.com/ ) gratuito per un singolo repository git.

È possibile automatizzare la distribuzione scegliendo "automatica" nella sezione della modalità di distribuzione.

Lo sto usando adesso. È molto facile e utile.


Non più libero.
mxcl


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.