เผยแพร่ไปยัง S3 โดยใช้ Git?


89

ไม่มีใครรู้วิธีการทำเช่นนี้? จนถึงตอนนี้ฉันยังไม่พบสิ่งที่เป็นประโยชน์ผ่านทาง Google

ฉันต้องการตั้งค่า repo ในเครื่องและใช้git pushเพื่อเผยแพร่ไปยัง S3 โดยมีแนวคิดที่จะให้เวอร์ชันท้องถิ่นควบคุมเนื้อหา แต่มีพื้นที่เก็บข้อมูลระยะไกลบน S3

สามารถทำได้หรือไม่และถ้าทำได้อย่างไร


1
OP ปัจจุบันคำตอบที่ยอมรับใช้ไม่ได้กับคำถามที่วางไว้ จะเป็นไปได้ไหมที่จะอัปเดตเพื่อสิ่งที่ดีกว่านี้ ฉันเชื่อว่าs3fsจะเป็นทางออกที่ทำงานได้
bnjmn

1
@Benjamin ขอบคุณที่เรียกร้องความสนใจของฉันกลับมาที่นี่มีการปรับปรุง
Andrew

การปรับใช้กับพื้นที่เก็บข้อมูลระยะไกล (เพื่อรักษาประวัติการสำรองข้อมูลของคอมมิต) และใช้git hookเพื่อซิงค์กับถัง S3 (เช่นs3cmd sync …) หรือไม่
Fabien Snauwaert

คำตอบ:


50

1 ใช้ JGitผ่านhttp://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html

ดาวน์โหลด jgit.sh เปลี่ยนชื่อเป็น jgit และวางไว้ในเส้นทางของคุณ (เช่น $ HOME / bin)

ตั้งค่าไฟล์ config. jgit และเพิ่มสิ่งต่อไปนี้ (แทนที่คีย์ AWS ของคุณ):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

หมายเหตุโดยการไม่ระบุ acl: public ในไฟล์. jgit ไฟล์ git บน S3 จะเป็นแบบส่วนตัว (ซึ่งเป็นสิ่งที่เราต้องการ) จากนั้นสร้างที่เก็บ S3 เพื่อจัดเก็บที่เก็บของคุณเรียกว่า git-repos จากนั้นสร้างที่เก็บ git เพื่ออัปโหลด:

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

ในข้างต้นฉันใช้เครื่องมือบรรทัดคำสั่ง s3cmd เพื่อสร้างที่เก็บข้อมูล แต่คุณสามารถทำได้ผ่านเว็บอินเทอร์เฟซของ Amazon เช่นกัน ตอนนี้เรามาดันมันไปที่ S3 (สังเกตว่าเราใช้ jgit อย่างไรเมื่อใดก็ตามที่เราโต้ตอบกับ S3 และ git มาตรฐานเป็นอย่างอื่น):

jgit push origin master

ตอนนี้ไปที่อื่น (เช่น cd / tmp) แล้วลองโคลนมัน:

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

เมื่อถึงเวลาอัปเดต (เนื่องจาก jgit ไม่รองรับการผสานหรือดึง) คุณทำได้ใน 2 ขั้นตอน:

cd chef-recipes
jgit fetch
git merge origin/master

2 ใช้ระบบไฟล์แบบ FUSE ที่สนับสนุนโดย Amazon S3

  1. รับบัญชี Amazon S3!

  2. ดาวน์โหลดรวบรวมและติดตั้ง (ดู InstallationNotes)

  3. ระบุข้อมูลรับรองความปลอดภัยของคุณ (รหัสคีย์การเข้าถึงและคีย์การเข้าถึงลับ) โดยใช้วิธีใดวิธีหนึ่งต่อไปนี้:

    • โดยใช้อ็อพชันบรรทัดคำสั่ง passwd_file

    • การตั้งค่าตัวแปรสภาพแวดล้อม AWSACCESSKEYID และ AWSSECRETACCESSKEY

    • โดยใช้ไฟล์. passwd-s3fs ในโฮมไดเร็กทอรีของคุณ

    • โดยใช้ไฟล์ / etc / passwd-s3fs ทั้งระบบ

    • ทำเช่นนี้

.

/usr/bin/s3fs mybucket /mnt

แค่นั้นแหละ! เนื้อหาของที่เก็บข้อมูล amazon "mybucket" ของคุณควรสามารถเข้าถึงได้ในขณะนี้อ่าน / เขียนใน / mnt


1
ผมทำตามคำแนะนำเหล่านี้ แต่ผมได้รับข้อผิดพลาดเมื่อฉันพยายามที่จะThe request signature we calculated does not match the signature you provided. Check your key and signing method jgit push origin masterมีความคิดอย่างไรที่ฉันจะทำให้มันหายไป?
ห์น

4
ทำไมคุณไม่ใช้คอมไพล์ล่ะ? นี้ดูเหมือนว่าทำงานมากเป็นพิเศษ / เพียงสิ่งที่หาง่ายระยะไกล repo คอมไพล์บน AWS แล้ว ...
cmcculloh

1
ฉันขอแนะนำให้อัปเดตคำตอบ (จริง) นี้เพื่อก้าวไปอีกขั้นด้วยpost-receiveเบ็ดที่ตรวจสอบไฟล์GIT_WORK_TREE. ดูที่นี่สำหรับรายละเอียดเพิ่มเติม s3fsฉันสิ้นสุดที่ได้รับการทำงานค่อนข้างดีด้วย ขอแนะนำและขอบคุณที่ช่วยฉันเริ่มต้น
bnjmn

1
@cmculloh หากคุณยังไม่มีอินสแตนซ์ EC2 นั่นอาจเป็นปัญหามากขึ้นและเสียค่าใช้จ่ายในระยะยาวเพียงแค่มี git repo นอกจากนี้พื้นที่จัดเก็บ S3 ยังทนทานกว่ามากโดยค่าเริ่มต้น เพื่อให้ได้ความทนทานเท่ากันกับ EC2 คุณจะต้องสำรองสแน็ปช็อตสูงสุด S3 อยู่ดี
Jeremy

1
ดูเหมือนว่าบล็อกโพสต์ได้รับการอัปเดตเพื่อทำให้หน้าโครงการ jgit เชื่อมโยงไปยังที่เก็บของโครงการegit [ eclipse.org/egit/]และนั่นทำให้โซลูชัน 1 ทั้งหมดสับสน หลังจากค้นหาเล็กน้อยฉันพบหน้าโครงการ jgit ดั้งเดิมจากที่ที่สามารถดาวน์โหลดและใช้ jgit.sh ได้ ลิงค์คือeclipse.org/jgit/downloadสำหรับทุกคนที่อาจต้องการในอนาคต
MN Islam Shihan

9

Dandelion เป็นอีกหนึ่งเครื่องมือ CLI ที่จะทำให้ที่เก็บ Git ซิงค์กับ S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion


ไม่มีความคิดที่จะลงคะแนนนี้ ฉันคิดว่าโซลูชันนี้ดีถ้าเป้าหมายคือการปรับใช้เพิ่มเติมควบคู่ไปกับ git สำหรับการจัดการเวอร์ชันภายในเครื่องและ S3 สำหรับโฮสติ้ง นั่นคือสิ่งที่น่าจะเป็นคำถาม
Tabrez

8

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

คุณเพียงแค่ต้องวิ่ง git-s3 deploy

มาพร้อมกับประโยชน์ทั้งหมดของ git repo และอัปโหลด / ลบเฉพาะไฟล์ที่คุณเปลี่ยนแปลง
หมายเหตุ: ปรับใช้ไม่ได้โดยนัยผ่าน git push แต่คุณสามารถทำได้ผ่าน git hook


14
FYI นี้ขึ้นอยู่กับซึ่งจะขึ้นอยู่กับComposer PHP
Maarten

3

คุณสามารถใช้ไคลเอนต์ mc aka Minioซึ่งเขียนด้วย Golang และมีอยู่ใน Open Source Apache License สามารถใช้ได้กับ Mac, Linux, Windows, FreeBsd คุณสามารถใช้ได้mc mirrorคำสั่งเพื่อให้บรรลุความต้องการของคุณ

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

การกำหนดค่า mc สำหรับ Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • แทนที่ด้วยคีย์การเข้าถึง / รหัสลับของคุณ
  • โดยค่าเริ่มต้น mc ใช้ลายเซ็นเวอร์ชัน 4 ของ amazon S3
  • mys3 เป็นนามแฝงของ Amazon S3 สำหรับไคลเอนต์ minio

มิเรอร์ github local repository / directory พูดชื่อmygithubกับ amazon S3 bucket namemygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

หวังว่ามันจะช่วย Disclaimer: ฉันทำงานให้Minio


3

คุณยังสามารถทำได้โดยใช้ AWS CLI และ Git (พร้อมตะขอ) ตรวจสอบแล้วว่าทำงานบน Windows 10 ควรทำงานบน Linux / Mac

ตั้งค่าการซิงค์กับ S3 เมื่อกระทำ

  1. ติดตั้ง AWS CLI
  2. ตั้งค่าข้อมูลรับรองการเข้าถึงแบบเป็นโปรแกรมของ IAM (คุณสามารถ จำกัด ไว้ที่ S3 และลดลงเหลือเพียงที่เก็บข้อมูล)
  3. กำหนดค่า AWS CLI ด้วยข้อมูลรับรอง
  4. สร้างที่เก็บข้อมูล S3 ในคอนโซล AWS หรือบน CLI
  5. ตรวจสอบว่าที่เก็บข้อมูลเป็นแบบส่วนตัว
  6. สร้างbaregit repo ใหม่ของโครงการ git ที่มีอยู่:
mkdir myproject.git
cd myproject.git
git init --bare

หมายเหตุ: การใช้ bare repo จะทำหน้าที่เป็นอัปสตรีมและ bare repo จะมีเฉพาะการเปลี่ยนแปลงที่คุณต้องการอัปโหลดไปยังถัง S3 และไฟล์ที่ไม่ถูกละเว้นการกำหนดค่า git ภายในเครื่อง ฯลฯ

  1. ติดตั้งเบ็ดนี้post-updateในไดเร็กทอรี hooksเปล่า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. อัปเดต hook ด้วยชื่อที่เก็บข้อมูล S3 ที่ถูกต้อง
  3. ตอนนี้ cd ลงในmyprojectไดเร็กทอรีของคุณและเพิ่ม repo เปล่าเป็นอัปสตรีมตั้งชื่อs3เช่น:
git remote add s3 path/to/bare/directory/myproject.git 

หมายเหตุ: คุณสามารถใช้เส้นทางสัมพัทธ์สำหรับพา ธ ไปยังไดเร็กทอรีเปล่า

การทดสอบ

  1. เพิ่มการเปลี่ยนแปลงใน repo ของคุณและกระทำ
  2. ผลักดันการเปลี่ยนแปลงของคุณไปที่ s3อัปสตรีมเมื่อคุณต้องการซิงค์การเปลี่ยนแปลงกับที่เก็บข้อมูล S3 ของคุณ
  3. คุณควรเห็นการเปลี่ยนแปลงซิงค์กับที่เก็บข้อมูล S3 ที่คุณระบุคุณยังสามารถดูการเปลี่ยนแปลงในที่เก็บข้อมูล S3 เพื่อตรวจสอบว่าทุกอย่างทำงานได้

อ้างอิง:


ใช้ได้ถ้าคุณติดตั้ง AWS CLI และ Git ไว้แล้ว ถือว่ามีความรู้ Git เกี่ยวกับ hooks ซึ่งคุณรู้วิธีตั้งค่าผู้ใช้ IAM และข้อมูลรับรองแบบเป็นโปรแกรมและสร้างบัคเก็ต S3
b01

ดังนั้นฉันเข้าใจถูกต้องหรือไม่ว่ามีสอง repos ในเครื่องและ repo ในเครื่องเปล่าถูกตั้งค่าให้ซิงค์กับ s3 ผ่านหลังการอัปเดตหรือไม่
Josiah

@ Josiah ใช่ถูกต้อง แม้ว่าจะไม่จำเป็น แต่ก็ช่วยลดความซับซ้อนของการซิงค์เฉพาะไฟล์ที่คุณต้องการใน S3 เนื่องจาก repo เปล่าจะมีเฉพาะไฟล์ที่ผูกมัดเท่านั้น ฉันลองสิ่งนี้โดยไม่ใช้ repo เปล่า แต่แล้วฉันก็ต้องแยกไฟล์บางไฟล์จากการซิงค์กับ S3 โดยเฉพาะอย่างยิ่งในไฟล์. gitignore
b01

1

คุณสามารถใช้ deplybot ( http://deploybot.com/ ) ซึ่งไม่มีค่าใช้จ่ายสำหรับที่เก็บ git เดียว

คุณสามารถปรับใช้โดยอัตโนมัติได้โดยเลือก "อัตโนมัติ" ในส่วนโหมดการปรับใช้

ฉันกำลังใช้มันตอนนี้ เป็นเรื่องง่ายและมีประโยชน์มาก


ไม่ฟรีอีกต่อไป
mxcl

-1

เวอร์ชันควบคุมไฟล์ของคุณด้วย Github? สคริปต์นี้ (และการกำหนดค่า GitHub / AWS ที่เกี่ยวข้อง) จะรับข้อตกลงใหม่กับ repo ของคุณและซิงค์กับที่เก็บข้อมูล S3 ของคุณ

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


-1

คุณต้องการJGitสำหรับมัน

เพียงบันทึกไฟล์. jgit ในไดเร็กทอรีผู้ใช้ด้วยข้อมูลรับรอง aws และคุณสามารถใช้ git กับ s3

นี่คือลักษณะของ git url ของคุณ

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

คุณสามารถทำทุกอย่างที่คุณทำกับกับgitjgit

รับคำแนะนำการตั้งค่าฉบับสมบูรณ์ที่นี่

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.