Xuất bản lên S3 bằng Git?


87

Có ai biết cách để làm điều này không? Cho đến nay tôi vẫn chưa thể tìm thấy bất cứ điều gì hữu ích thông qua Google.

Tôi thực sự muốn thiết lập một git pushkho lưu trữ cục bộ và sử dụng để xuất bản nó lên S3, ý tưởng là có quyền kiểm soát phiên bản cục bộ đối với nội dung nhưng lưu trữ từ xa trên S3.

Điều này có thể được thực hiện, và nếu có, làm thế nào?


1
OP, Hiện tại câu trả lời được chấp nhận không áp dụng cho câu hỏi được đặt ra. Có thể cập nhật để tốt hơn không? Tôi tin rằng đó s3fslà một giải pháp khả thi.
bnjmn

1
@Benjamin Cảm ơn bạn đã thu hút sự chú ý của tôi trở lại vấn đề này, nó đã được cập nhật.
Andrew

Sẽ không hợp lý nếu triển khai đến bất kỳ kho lưu trữ từ xa nào (để bảo toàn lịch sử sao lưu của các cam kết) và sử dụng git hook để đồng bộ hóa đơn giản với một thùng S3 (ví dụ s3cmd sync …:)?
Fabien Snauwaert

Câu trả lời:


50

1 Sử dụng JGit qua http://blog.spearce.org/2008/07/using-jgit-to-publish-on-amazon-s3.html

Tải xuống jgit.sh, đổi tên thành jgit và đặt nó vào đường dẫn của bạn (ví dụ: $ HOME / bin).

Thiết lập tệp cấu hình .jgit và thêm những thứ sau (thay thế các khóa AWS của bạn):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Lưu ý, bằng cách không chỉ định acl: public trong tệp .jgit, các tệp git trên S3 sẽ là riêng tư (đó là những gì chúng tôi muốn). Tiếp theo, tạo một thùng S3 để lưu kho lưu trữ của bạn, hãy gọi nó là git-repos, sau đó tạo một kho lưu trữ git để tải lên:

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

Trong phần trên, tôi đang sử dụng công cụ dòng lệnh s3cmd để tạo nhóm nhưng bạn cũng có thể thực hiện việc đó thông qua giao diện web Amazon. Bây giờ hãy đẩy nó lên S3 (lưu ý cách chúng tôi sử dụng jgit bất cứ khi nào chúng tôi tương tác với S3 và git tiêu chuẩn nếu không):

jgit push origin master

Bây giờ đi đến một nơi khác (ví dụ: cd / tmp) và thử sao chép nó:

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

Khi cần cập nhật nó (vì jgit không hỗ trợ hợp nhất hoặc kéo), bạn thực hiện theo 2 bước:

cd chef-recipes
jgit fetch
git merge origin/master

2 Sử dụng hệ thống tệp dựa trên FUSE được hỗ trợ bởi Amazon S3

  1. Tạo tài khoản Amazon S3!

  2. Tải xuống, biên dịch và cài đặt. (xem phần Cài đặt)

  3. Chỉ định Thông tin đăng nhập bảo mật của bạn (ID Khóa truy cập & Khóa truy cập bí mật) bằng một trong các phương pháp sau:

    • sử dụng tùy chọn dòng lệnh passwd_file

    • thiết lập các biến môi trường AWSACCESSKEYID và AWSSECRETACCESSKEY

    • sử dụng tệp .passwd-s3fs trong thư mục chính của bạn

    • sử dụng tệp toàn hệ thống / etc / passwd-s3fs

    • làm cái này

.

/usr/bin/s3fs mybucket /mnt

Đó là nó! nội dung của thùng amazon "mybucket" của bạn giờ có thể truy cập đọc / ghi trong / mnt


1
Tôi đã làm theo các hướng dẫn này nhưng tôi gặp The request signature we calculated does not match the signature you provided. Check your key and signing methodlỗi khi cố gắng thực hiện jgit push origin master. Bất kỳ ý tưởng làm thế nào tôi có thể làm cho điều đó biến mất?
john

4
Tại sao bạn không sử dụng git? Điều này có vẻ như rất nhiều công việc thêm / stuff chỉ dành riêng cho một đơn giản từ xa git repo trên AWS ...
cmcculloh

1
Tôi khuyên bạn nên cập nhật câu trả lời (thực) này để tiến thêm một bước với một post-receivehook kiểm tra GIT_WORK_TREE. Xem tại đây để biết thêm chi tiết. Tôi đã kết thúc việc này để làm việc khá tốt s3fs. Rất khuyến khích và cảm ơn vì đã giúp tôi bắt đầu.
bnjmn

1
@cmculloh nếu bạn chưa có phiên bản EC2 thì điều đó có thể rắc rối hơn và tốn kém lâu dài chỉ để có một git repo. Ngoài ra, lưu trữ S3 mặc định bền hơn nhiều; để có được độ bền tương tự trên EC2, bạn vẫn phải sao lưu ảnh chụp nhanh lên S3
Jeremy

1
Có vẻ như bài đăng trên blog đã được cập nhật để làm cho trang dự án jgit liên kết đến kho lưu trữ của dự án egit [ eclipse.org/egit/] và điều đó làm cho toàn bộ giải pháp 1 trở nên khó hiểu. Sau khi tìm kiếm một chút, tôi có thể tìm thấy trang dự án jgit gốc từ nơi có thể tải xuống và sử dụng jgit.sh. Liên kết là eclipse.org/jgit/download cho bất kỳ ai có thể cần nó trong tương lai.
MN Islam Shihan

9

Dandelion là một công cụ CLI khác sẽ giữ cho các kho lưu trữ Git đồng bộ với S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion


Không biết ai đã phản đối điều này. Tôi nghĩ rằng giải pháp này là tốt nếu mục tiêu là triển khai gia tăng cùng với git để quản lý phiên bản cục bộ và S3 để lưu trữ. Đó là những gì có vẻ là câu hỏi.
Tabrez

8

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

Bạn chỉ cần chạy git-s3 deploy

Nó đi kèm với tất cả các lợi ích của git repo và chỉ tải lên / xóa các tệp bạn đã thay đổi.
Lưu ý: Các triển khai không ẩn thông qua git push nhưng bạn có thể đạt được điều đó thông qua git hook.


14
FYI, điều này phụ thuộc vào Composer, điều này phụ thuộc vào PHP.
Maarten

3

Bạn có thể sử dụng mc hay còn gọi là Minio client , được viết bằng Golang và có sẵn theo Giấy phép Apache Nguồn mở. Nó có sẵn cho Mac, Linux, Windows, FreeBsd. Bạn có thể sử dụng mc mirrorlệnh để đạt được yêu cầu của mình.

mc GNU / Linux Tải xuống

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

Định cấu hình mc cho Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Thay thế bằng khóa truy cập / khóa bí mật của bạn
  • Theo mặc định mc sử dụng phiên bản chữ ký 4 của amazon S3.
  • mys3 là bí danh Amazon S3 cho ứng dụng khách minio

Phản chiếu kho lưu trữ / thư mục cục bộ github của bạn nói tênmygithub thành tên thùng S3 của amazonmygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Hy vọng nó có ích. Tuyên bố từ chối trách nhiệm: Tôi làm việc cho Minio


3

Bạn cũng có thể thực hiện việc này bằng AWS CLI và Git (có móc). Đã xác minh hoạt động trên Windows 10. Nên hoạt động trên Linux / Mac.

Thiết lập Đồng bộ hóa với S3 khi cam kết

  1. Cài đặt AWS CLI
  2. Thiết lập thông tin xác thực truy cập có lập trình IAM (bạn có thể giới hạn ở S3 và thậm chí xuống chỉ nhóm).
  3. Định cấu hình AWS CLI bằng thông tin đăng nhập
  4. Tạo nhóm S3 trong bảng điều khiển AWS hoặc trên CLI.
  5. Đảm bảo thùng là riêng tư.
  6. Tạo một barekho git mới cho dự án git hiện có của bạn:
mkdir myproject.git
cd myproject.git
git init --bare

LƯU Ý: Việc sử dụng kho lưu trữ trần sẽ đóng vai trò là quá trình ngược dòng và kho lưu trữ trần sẽ chỉ có các thay đổi mà bạn muốn tải lên bộ chứa S3 và không bỏ qua các tệp, cấu hình git cục bộ, v.v.

  1. Cài đặt hook này post-updatevào hookstrong myproject.gitthư mục trần .
    #!/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. Cập nhật hook với tên thùng S3 chính xác.
  3. Bây giờ cd vào myprojectthư mục của bạn và thêm kho lưu trữ trần như một bản ngược dòng, đặt tên s3cho nó chẳng hạn:
git remote add s3 path/to/bare/directory/myproject.git 

LƯU Ý: Bạn có thể sử dụng một đường dẫn tương đối cho đường dẫn đến thư mục trần.

Thử nghiệm

  1. Thêm các thay đổi vào repo của bạn và cam kết.
  2. Đẩy các thay đổi của bạn lên s3ngược dòng khi bạn muốn đồng bộ hóa các thay đổi với nhóm S3 của mình.
  3. Bạn sẽ thấy các thay đổi được đồng bộ hóa với nhóm S3 mà bạn đã chỉ định, bạn cũng có thể xem các thay đổi trong nhóm S3 để xác minh mọi thứ đã hoạt động.

Người giới thiệu:


Điều này là OK nếu bạn đã cài đặt AWS CLI và Git. Nó giả định kiến ​​thức Git về hook, rằng bạn biết cách thiết lập người dùng IAM và thông tin đăng nhập có lập trình và tạo nhóm S3.
b01

Vì vậy, tôi có hiểu chính xác rằng điều này có hai repo cục bộ và repo cục bộ trần được thiết lập để tự đồng bộ hóa với s3 thông qua hậu cập nhật không?
Josiah

@Josiah Vâng, điều đó chính xác. Mặc dù không cần thiết, nhưng nó sẽ giúp đơn giản hóa việc đồng bộ hóa chỉ các tệp bạn muốn trong S3, vì repo trần sẽ chỉ chứa các tệp được cam kết. Tôi đã thử điều này mà không có repo trần, nhưng sau đó tôi phải loại trừ một số tệp khỏi đồng bộ hóa với S3, đáng chú ý là bất kỳ thứ gì trong tệp .gitignore.
b01

1

Bạn có thể sử dụng dịch vụ deplybot ( http://deploybot.com/ ) miễn phí cho kho lưu trữ git duy nhất.

Bạn có thể tự động hóa việc triển khai bằng cách chọn "tự động" trong phần chế độ triển khai.

Tôi đang sử dụng nó bây giờ. Nó rất dễ dàng và hữu ích.


Không còn miễn phí.
mxcl


-1

Bạn cần JGit cho nó.

Chỉ cần lưu tệp .jgit trong thư mục Người dùng với thông tin đăng nhập aws và bạn có thể sử dụng git với s3.

Đây là url git của bạn sẽ trông như thế nào.

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

Bạn có thể làm mọi thứ bạn làm gitvới jgit.

Nhận hướng dẫn thiết lập đầy đủ tại đây.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.