Publikasikan ke S3 menggunakan Git?


89

Apakah ada yang tahu bagaimana melakukan ini? Sejauh ini saya belum dapat menemukan sesuatu yang berguna melalui Google.

Saya benar-benar ingin menyiapkan repo lokal dan menggunakannya git pushuntuk menerbitkannya ke S3, idenya adalah untuk memiliki kontrol versi lokal atas aset tetapi penyimpanan jarak jauh di S3.

Bisakah ini dilakukan, dan jika ya, bagaimana?


1
OP, Saat ini jawaban yang diterima tidak berlaku untuk pertanyaan yang diajukan. Apakah mungkin memperbarui untuk kebaikan yang lebih besar? Saya percaya s3fsmenjadi solusi yang layak.
bnjmn

1
@Benjamin Terima kasih telah meminta perhatian saya kembali untuk yang satu ini, sudah diperbarui.
Andrew

Tidakkah masuk akal untuk menerapkan ke repositori jarak jauh apa pun (untuk mempertahankan riwayat pencadangan komitmen) dan menggunakan git hook untuk menyinkronkan dengan bucket S3 (misalnya:) s3cmd sync …?
Fabien Snauwaert

Jawaban:


50

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

Unduh jgit.sh, ganti namanya menjadi jgit dan letakkan di jalur Anda (misalnya $ HOME / bin).

Siapkan file konfigurasi .jgit dan tambahkan yang berikut ini (menggantikan kunci AWS Anda):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Catatan, dengan tidak menentukan acl: public di file .jgit, file git di S3 akan menjadi privat (yang kami inginkan). Selanjutnya buat bucket S3 untuk menyimpan repositori Anda, sebut saja git-repos, lalu buat repositori git untuk diunggah:

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

Di atas saya menggunakan alat baris perintah s3cmd untuk membuat ember tetapi Anda dapat melakukannya melalui antarmuka web Amazon juga. Sekarang mari kita dorong ke S3 (perhatikan bagaimana kita menggunakan jgit setiap kali kita berinteraksi dengan S3, dan git standar sebaliknya):

jgit push origin master

Sekarang pergilah ke tempat lain (misalnya cd / tmp) dan coba kloning:

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

Ketika tiba saatnya untuk memperbaruinya (karena jgit tidak mendukung penggabungan atau penarikan) Anda melakukannya dalam 2 langkah:

cd chef-recipes
jgit fetch
git merge origin/master

2 Gunakan sistem file berbasis FUSE yang didukung oleh Amazon S3

  1. Dapatkan akun Amazon S3!

  2. Unduh, kompilasi, dan instal. (lihat Catatan Instalasi)

  3. Tentukan Kredensial Keamanan Anda (Access Key ID & Secret Access Key) dengan salah satu metode berikut:

    • menggunakan opsi baris perintah passwd_file

    • menyetel variabel lingkungan AWSACCESSKEYID dan AWSSECRETACCESSKEY

    • menggunakan file .passwd-s3fs di direktori home Anda

    • menggunakan file system-wide / etc / passwd-s3fs

    • melakukan hal ini

.

/usr/bin/s3fs mybucket /mnt

Itu dia! konten dari bucket amazon Anda "mybucket" sekarang seharusnya dapat diakses dengan membaca / menulis di / mnt


1
Saya mengikuti petunjuk ini tetapi saya mendapatkan The request signature we calculated does not match the signature you provided. Check your key and signing methodkesalahan saat mencoba jgit push origin master. Ada ide bagaimana saya bisa menghilangkannya?
john

4
Mengapa Anda tidak menggunakan git saja? Sepertinya banyak pekerjaan ekstra / hal-hal hanya untuk repo git jarak jauh sederhana di aws ...
cmcculloh

1
Saya akan menyarankan untuk memperbarui jawaban (nyata) ini untuk melangkah lebih jauh dengan post-receivepengait yang memeriksa GIT_WORK_TREE. Lihat di sini untuk lebih jelasnya. Saya akhirnya mendapatkan ini untuk bekerja dengan cukup baik s3fs. Sangat direkomendasikan dan terima kasih telah membantu saya memulai.
bnjmn

1
@cmculloh jika Anda belum memiliki instans EC2 maka itu bisa lebih merepotkan dan membutuhkan biaya jangka panjang hanya untuk memiliki git repo. Penyimpanan S3 juga jauh lebih tahan lama secara default; untuk mendapatkan daya tahan yang sama pada EC2, Anda harus mendukung snapshot hingga S3
Jeremy

1
Tampaknya posting blog telah diperbarui untuk membuat halaman proyek jgit menautkan ke repositori proyek egit [ eclipse.org/egit/] dan itu membuat keseluruhan solusi 1 membingungkan. Setelah sedikit pencarian, saya bisa menemukan halaman proyek jgit asli dari mana jgit.sh dapat diunduh dan digunakan. Tautannya adalah eclipse.org/jgit/download untuk siapa saja yang mungkin membutuhkannya di masa mendatang.
MN Islam Shihan

9

Dandelion adalah alat CLI lain yang akan menjaga repositori Git tetap sinkron dengan S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion


Tidak tahu siapa yang tidak menyukai ini. Saya pikir solusi ini bagus jika tujuannya adalah untuk menerapkan tambahan secara bertahap bersama git untuk manajemen versi lokal dan S3 untuk hosting. Itulah yang tampaknya menjadi pertanyaan.
Tabrez

8

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

Anda hanya harus lari git-s3 deploy

Muncul dengan semua manfaat dari git repo dan mengunggah / menghapus hanya file yang telah Anda ubah.
Catatan: Penerapan tidak tersirat melalui git push, tetapi Anda dapat melakukannya melalui git hook.


14
FYI, ini tergantung Composer, yang pada gilirannya tergantung PHP.
Maarten

3

Anda dapat menggunakan mc alias Minio client , yang ditulis dalam Golang & tersedia di bawah Lisensi Apache Sumber Terbuka. Ini tersedia untuk Mac, Linux, Windows, FreeBsd. Anda dapat menggunakan mc mirrorperintah untuk mencapai kebutuhan Anda.

mc GNU / Linux Unduh

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

Mengonfigurasi mc untuk Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Ganti dengan akses / kunci rahasia Anda
  • Secara default mc menggunakan tanda tangan versi 4 dari amazon S3.
  • mys3 adalah alias Amazon S3 untuk klien minio

Cerminkan repositori / direktori lokal github Anda, katakan namamygithub ke nama bucket Amazon S3mygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Semoga membantu Penafian: Saya bekerja untuk Minio


3

Anda juga dapat melakukan ini menggunakan AWS CLI dan Git (dengan pengait). Diverifikasi berfungsi pada Windows 10. Seharusnya berfungsi di Linux / Mac.

Atur Sinkronisasi ke S3 saat komit

  1. Instal AWS CLI
  2. Siapkan kredensial akses terprogram IAM (Anda dapat membatasi hingga S3 dan bahkan hanya ke bucket).
  3. Konfigurasikan AWS CLI dengan kredensial
  4. Buat bucket S3 di konsol AWS, atau di CLI.
  5. Pastikan ember bersifat pribadi.
  6. Buat barerepo git baru dari proyek git Anda yang sudah ada:
mkdir myproject.git
cd myproject.git
git init --bare

CATATAN: Menggunakan bare repo akan berfungsi sebagai upstream dan bare repo hanya akan memiliki perubahan yang ingin Anda unggah ke S3 bucket dan tidak mengabaikan file, konfigurasi git lokal, dll.

  1. Instal kait ini sebagai post-updatemenjadi hookssatu telanjang myproject.gitdirektori.
    #!/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. Perbarui pengait dengan nama bucket S3 yang benar.
  3. Sekarang cd ke myprojectdirektori Anda dan tambahkan repo telanjang sebagai upstream, beri nama s3misalnya:
git remote add s3 path/to/bare/directory/myproject.git 

CATATAN: Anda dapat menggunakan jalur relatif untuk jalur ke direktori telanjang.

Menguji

  1. Tambahkan perubahan ke repo Anda dan lakukan.
  2. Dorong perubahan Anda ke s3upstream saat Anda ingin menyinkronkan perubahan ke bucket S3 Anda.
  3. Anda akan melihat perubahan yang disinkronkan ke bucket S3 yang Anda tentukan, Anda juga dapat melihat perubahan di bucket S3 untuk memverifikasi semuanya bekerja.

Referensi:


Ini tidak masalah jika Anda sudah menginstal AWS CLI dan Git. Ini mengasumsikan pengetahuan Git tentang hook, bahwa Anda tahu cara menyiapkan pengguna IAM dan kredensial terprogram dan membuat bucket S3.
b01

Jadi apakah saya mengerti dengan benar bahwa ini memiliki dua repo secara lokal dan repo lokal telanjang diatur untuk menyinkronkan dirinya sendiri ke s3 melalui pasca-pembaruan?
Yosia

@ Yosia Ya itu benar. Meskipun tidak diperlukan, ini membantu menyederhanakan sinkronisasi hanya file yang Anda inginkan di S3, karena repo telanjang hanya akan berisi file yang dikomit. Saya mencoba ini tanpa repo telanjang, tetapi kemudian saya harus mengecualikan beberapa file dari sinkronisasi ke S3, terutama semua yang ada di file .gitignore.
b01

1

Anda dapat menggunakan layanan deplybot ( http://deploybot.com/ ) yang gratis untuk satu repositori git.

Anda dapat mengotomatiskan penerapan dengan memilih "otomatis" di bagian mode penerapan.

Saya sedang menggunakannya sekarang. Sangat mudah dan bermanfaat.


Tidak lagi gratis.
mxcl


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.