Опублікувати на S3 за допомогою Git?


87

Хтось знає, як це зробити? Поки що мені не вдалося знайти нічого корисного через Google.

Я б дуже хотів налаштувати локальний репо та використовувати його git pushдля публікації в S3, ідея полягає в тому, щоб мати локальний контроль над активами, але віддаленим сховищем на S3.

Чи можна це зробити, і якщо так, то як?


1
ОП, В даний час прийнята відповідь не стосується поставленого питання. Чи можна було б оновити для загального блага? Я вважаю, s3fsщо це життєздатне рішення.
bnjmn

1
@Benjamin Дякую, що звернули мою увагу до цього, він оновлений.
Ендрю

Чи не має сенсу розгортатись у будь-якому віддаленому сховищі (для збереження історії резервних копій комітів) і використовувати git-гак для простої синхронізації з сегментом 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).

Налаштуйте конфігураційний файл .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. Завантажте, скомпілюйте та встановіть. (див. Примітки щодо встановлення)

  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
Чому б вам просто не використовувати git? Це здається великою кількістю додаткової роботи / речей лише для простого віддаленого
репозиторію

1
Я б запропонував оновити цю (справжню) відповідь, щоб зробити ще один крок далі за допомогою post-receiveгачка, який перевіряє GIT_WORK_TREE. Детальніше див. Тут . У підсумку я змусив це добре працювати s3fs. Дуже рекомендую і дякую, що допомогли мені розпочати.
bnjmn

1
@cmculloh, якщо у вас ще немає екземпляра EC2, то це може бути більшою проблемою і довгостроково коштувати лише для того, щоб мати репозиторій git. Крім того, зберігання S3 набагато довговічніше за замовчуванням; щоб отримати таку саму довговічність на EC2, вам все одно довелося б робити резервні копії знімків до S3
Джеремі

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 для хостингу. Ось у чому, здається, питання.
Табрез

8

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

Треба просто бігти git-s3 deploy

Він поставляється з усіма перевагами git-репо та завантажує / видаляє лише ті файли, які ви змінили.
Примітка: Розгортання не є неявними за допомогою git push, але ви можете досягти цього за допомогою git хука.


14
FYI, це залежить від того Composer, що, в свою чергу, залежить від PHP.
Maarten

3

Ви можете використовувати клієнт mc aka Minio , написаний на мові Golang і доступний під ліцензією Apache з відкритим кодом. Він доступний для 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 і скажіть ім’яmygithub на ім’я сегмента amazon S3mygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Сподіваюся, це допомагає Застереження: Я працюю на 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. Створіть нове bareрепозиторій git для вашого існуючого проекту git:
mkdir myproject.git
cd myproject.git
git init --bare

ПРИМІТКА. Використання оголеного репо буде виконуватися як вихідний потік, а оголене репо матиме лише ті зміни, які ви хочете завантажити в сегмент 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. Оновіть гачок, вказавши правильну назву сегмента S3.
  3. Тепер cd у свій myprojectкаталог і додайте оголене репо як вищий потік, назвіть його, s3наприклад:
git remote add s3 path/to/bare/directory/myproject.git 

ПРИМІТКА. Ви можете використовувати відносний шлях для шляху до голого каталогу.

Тестування

  1. Додайте зміни до свого репо та фіксуйте.
  2. Якщо s3ви хочете синхронізувати зміни зі своїм сегментом S3, натисніть ваші зміни вгору за потоком.
  3. Ви повинні побачити синхронізацію змін із сегментом S3, який ви вказали, ви також можете переглянути зміни в сегменті S3, щоб перевірити, чи все працює.

Список літератури:


Це нормально, якщо у вас вже встановлені AWS CLI та Git. Це передбачає знання Git хуків, що ви знаєте, як налаштувати користувачів IAM та програмні облікові дані та зробити сегменти S3.
b01

Тож я правильно розумію, що тут є два репозиторії локально, і голий локальний репо налаштований на синхронізацію з s3 за допомогою пост-оновлення?
Йосія

@Josiah Так, це правильно. Хоча це і не потрібно, це допомагає спростити синхронізацію лише тих файлів, які ви хочете в S3, оскільки оголене репо буде містити лише ті файли, які були зафіксовані. Я спробував це без оголеного репо, але потім мені довелося виключити деякі файли із синхронізації до S3, особливо щось у файлі .gitignore.
b01

1

Ви можете скористатися безкоштовною послугою deplybot ( http://deploybot.com/ ) для одного сховища git.

Ви можете автоматизувати розгортання, вибравши "автоматичний" у розділі режиму розгортання.

Я використовую його зараз. Це дуже просто і корисно.


Більше не безкоштовно.
mxcl

-1

керувати файлами за допомогою Github? Цей скрипт (та пов'язані з ним конфігурації GitHub / AWS) буде приймати нові коміти до вашого репозиторію та синхронізувати їх у вашому сегменті S3.

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


-1

Для цього вам потрібен JGit .

Просто збережіть файл .jgit у каталозі користувача з обліковими даними aws, і ви зможете використовувати git з s3.

Ось як виглядатиме ваша git-адреса.

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

Ви можете робити все, що ви робите gitз jgit.

Отримайте повний посібник з налаштування тут.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.