Publikować do S3 za pomocą Git?

89

Czy ktoś wie, jak to zrobić? Jak dotąd nie udało mi się znaleźć niczego przydatnego w Google.

Naprawdę chciałbym skonfigurować lokalne repozytorium i użyć go git pushdo opublikowania go w S3, pomysł polega na tym, aby mieć lokalną kontrolę wersji nad zasobami, ale zdalne przechowywanie na S3.

Czy można to zrobić, a jeśli tak, to w jaki sposób?

Andrzej
źródło
1
OP, Obecnie przyjęta odpowiedź nie dotyczy zadanego pytania. Czy byłaby możliwa aktualizacja dla większego dobra? Uważam, że s3fsjest to realne rozwiązanie.
bnjmn
1
@Benjamin Dzięki za ponowne zwrócenie mojej uwagi na ten, jest zaktualizowany.
Andrew
Czy nie miałoby sensu wdrożenie w jakimkolwiek zdalnym repozytorium (aby zachować kopię zapasową historii zatwierdzeń) i użycie haka git, aby po prostu zsynchronizować się z zasobnikiem S3 (np . s3cmd sync …:)?
Fabien Snauwaert

Odpowiedzi:

50

1 Użyj JGit przez http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html

Pobierz plik jgit.sh, zmień jego nazwę na jgit i umieść go w swojej ścieżce (na przykład $ HOME / bin).

Skonfiguruj plik konfiguracyjny .jgit i dodaj następujące elementy (zastępując klucze AWS):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Zauważ, że nie określając acl: public w pliku .jgit, pliki git na S3 będą prywatne (co chcieliśmy). Następnie utwórz zasobnik S3 do przechowywania repozytorium, nazwijmy go git-repos, a następnie utwórz repozytorium git do przesłania:

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

W powyższym używam narzędzia wiersza poleceń s3cmd do tworzenia wiadra, ale możesz to również zrobić za pośrednictwem interfejsu internetowego Amazon. Teraz przejdźmy do S3 (zauważ, jak używamy jgit za każdym razem, gdy wchodzimy w interakcję z S3, a standardowego git w przeciwnym razie):

jgit push origin master

Teraz przejdź do innego miejsca (np. Cd / tmp) i spróbuj go sklonować:

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

Kiedy przychodzi czas na aktualizację (ponieważ jgit nie obsługuje scalania ani ściągania), robisz to w 2 krokach:

cd chef-recipes
jgit fetch
git merge origin/master

2 Użyj systemu plików opartego na FUSE wspieranego przez Amazon S3

  1. Załóż konto Amazon S3!

  2. Pobierz, skompiluj i zainstaluj. (patrz uwagi dotyczące instalacji)

  3. Określ swoje poświadczenia bezpieczeństwa (identyfikator klucza dostępu i tajny klucz dostępu) za pomocą jednej z następujących metod:

    • używając opcji wiersza poleceń passwd_file

    • ustawienie zmiennych środowiskowych AWSACCESSKEYID i AWSSECRETACCESSKEY

    • używając pliku .passwd-s3fs w swoim katalogu domowym

    • używając pliku / etc / passwd-s3fs dla całego systemu

    • Zrób to

.

/usr/bin/s3fs mybucket /mnt

Otóż ​​to! zawartość twojego zasobnika amazon "mybucket" powinna być teraz dostępna do odczytu / zapisu w / mnt

Riceball LEE
źródło
1
Postępowałem zgodnie z tymi wskazówkami, ale The request signature we calculated does not match the signature you provided. Check your key and signing methodprzy próbie pojawia się błąd jgit push origin master. Masz jakiś pomysł, jak mogę to odejść?
john,
4
Dlaczego nie miałbyś po prostu użyć git? Wydaje się to dużo dodatkowej pracy / rzeczy tylko do prostego zdalnego git repo na AWS ...
cmcculloh
1
Sugerowałbym zaktualizowanie tej (prawdziwej) odpowiedzi, aby przejść o krok dalej za pomocą post-receivehaka, który sprawdza GIT_WORK_TREE. Więcej informacji znajdziesz tutaj . Skończyło się na tym, że całkiem dobrze to działało s3fs. Gorąco polecam i dziękuję za pomoc w rozpoczęciu.
bnjmn
1
@cmculloh, jeśli nie masz jeszcze instancji EC2, może to być większy problem i kosztować długoterminowo, tylko samo posiadanie repozytorium git. Również pamięć S3 jest domyślnie znacznie trwalsza; aby uzyskać taką samą trwałość na EC2, i tak musiałbyś tworzyć kopie migawek do S3
Jeremy
1
Wygląda na to, że wpis na blogu został zaktualizowany, aby strona projektu jgit zawierała odnośnik do repozytorium projektu egit [ eclipse.org/egit/] , co sprawia, że ​​rozwiązanie 1 jest skomplikowane. Po krótkich poszukiwaniach mogłem znaleźć oryginalną stronę projektu jgit, z której można pobrać i używać jgit.sh. Link to eclipse.org/jgit/download dla każdego, kto może go potrzebować w przyszłości.
MN Islam Shihan
9

Dandelion to kolejne narzędzie CLI, które będzie synchronizować repozytoria Git z S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion

scttnlsn
źródło
Nie mam pojęcia, kto to zlekceważył. Myślę, że to rozwiązanie jest dobre, jeśli celem jest wdrażanie przyrostowe obok git do lokalnego zarządzania wersjami i S3 do hostingu. To wydaje się być pytaniem.
Tabrez,
8

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

Po prostu musisz biec git-s3 deploy

Ma wszystkie zalety repozytorium git i przesyła / usuwa tylko zmienione pliki.
Uwaga: Wdrożenia nie są niejawne za pomocą git push, ale można to osiągnąć za pomocą haka git.

schickling
źródło
14
FYI, to zależy od tego Composer, co z kolei zależy PHP.
Maarten
3

Możesz użyć klienta mc aka Minio , napisanego w języku Golang i dostępnego na licencji Open Source Apache. Jest dostępny dla komputerów Mac, Linux, Windows, FreeBsd. Możesz użyć mc mirrorpolecenia, aby spełnić swoje wymagania.

mc GNU / Linux Pobieranie

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

Konfigurowanie MC dla Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Zastąp kluczem dostępu / tajnym
  • Domyślnie mc używa podpisu w wersji 4 amazon S3.
  • mys3 to alias Amazon S3 dla klienta minio

Utwórz kopię lustrzaną lokalnego repozytorium / katalogumygithub na githubie, powiedz nazwę do nazwy zasobnika Amazon S3mygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Mam nadzieję, że to pomoże Zastrzeżenie: Pracuję dla Minio

koolhead17
źródło
3

Możesz to również zrobić za pomocą interfejsu AWS CLI i Gita (z hakami). Zweryfikowana praca na Windows 10. Powinna działać na Linux / Mac.

Skonfiguruj synchronizację z S3 po zatwierdzeniu

  1. Zainstaluj AWS CLI
  2. Skonfiguruj poświadczenia dostępu programowego IAM (możesz ograniczyć do S3, a nawet tylko do zasobnika).
  3. Skonfiguruj interfejs wiersza polecenia AWS za pomocą poświadczeń
  4. Utwórz zasobnik S3 w konsoli AWS lub w interfejsie wiersza polecenia.
  5. Upewnij się, że wiadro jest prywatne.
  6. Utwórz nowe barerepozytorium git dla istniejącego projektu git:
mkdir myproject.git
cd myproject.git
git init --bare

UWAGA: Korzystanie z samego repozytorium będzie służyło jako nadrzędne, a samo repozytorium będzie zawierało tylko zmiany, które chcesz przesłać do zasobnika S3, a nie ignorowane pliki, lokalne konfiguracje git itp.

  1. Zainstaluj ten hak jak post-updatew hooksgołym myproject.gitkatalogu.
    #!/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. Zaktualizuj hak, podając prawidłową nazwę zasobnika S3.
  3. Teraz przejdź do swojego myprojectkatalogu i dodaj nagie repozytorium jako nadrzędne, nazwij je s3na przykład:
git remote add s3 path/to/bare/directory/myproject.git 

UWAGA: Możesz użyć ścieżki względnej jako ścieżki do katalogu podstawowego.

Testowanie

  1. Dodaj zmiany do repozytorium i zatwierdź.
  2. Prześlij swoje zmiany na s3wyższy poziom, jeśli chcesz zsynchronizować zmiany z zasobnikiem S3.
  3. Powinieneś zobaczyć synchronizację zmian z określonym zasobnikiem S3, możesz również wyświetlić zmiany w zasobniku S3, aby sprawdzić, czy wszystko działa.

Bibliografia:

b01
źródło
To jest w porządku, jeśli masz już zainstalowany interfejs wiersza poleceń AWS i Git. Zakłada on znajomość hooków w Git, że wiesz, jak skonfigurować użytkowników IAM i poświadczenia programistyczne oraz tworzyć zasobniki S3.
b01
Czy więc dobrze rozumiem, że ma to dwa repozytoria lokalnie, a samo repozytorium lokalne jest skonfigurowane tak, aby synchronizowało się z s3 po aktualizacji?
Josiah
@Josiah Tak, zgadza się. Chociaż nie jest to konieczne, pomaga uprościć synchronizację tylko tych plików, które chcesz w S3, ponieważ samo repozytorium będzie zawierało tylko zatwierdzone pliki. Próbowałem tego bez samego repozytorium, ale potem musiałem wykluczyć niektóre pliki z synchronizacji z S3, szczególnie wszystko w pliku .gitignore.
b01
1

Możesz skorzystać z usługi deplybot ( http://deploybot.com/ ), która jest bezpłatna dla pojedynczego repozytorium git.

Możesz zautomatyzować wdrażanie, wybierając opcję „automatyczne” w sekcji trybu wdrażania.

Używam go teraz. Jest to bardzo łatwe i przydatne.

Jayaprakash
źródło
Już nie za darmo.
mxcl,
-1

kontrola wersji plików za pomocą Github? Ten skrypt (i powiązane z nim konfiguracje GitHub / AWS) przyjmie nowe zatwierdzenia do Twojego repozytorium i zsynchronizuje je z Twoim zasobnikiem S3.

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

Max Hodges
źródło
-1

Potrzebujesz do tego JGit .

Po prostu zapisz plik .jgit w katalogu użytkownika z poświadczeniami aws i możesz używać git z s3.

Oto, jak będzie wyglądał Twój adres URL git.

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

Można zrobić wszystko, co robisz ze gitz jgit.

Uzyskaj pełny przewodnik konfiguracji tutaj.

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

Sorter
źródło