Опубликовать на S3 с помощью Git?

87

Кто-нибудь знает как это сделать? Пока ничего полезного через гугл найти не удалось.

Я действительно хотел бы настроить локальное репо и использовать его git pushдля публикации на S3, идея заключается в том, чтобы иметь локальный контроль версий над активами, но удаленное хранилище на S3.

Можно ли это сделать, и если да, то как?

Андрей
источник
1
OP, в настоящее время принятый ответ не относится к заданному вопросу. Можно ли было бы обновить для большего блага? Я считаю, s3fsчто это жизнеспособное решение.
bnjmn 02
1
@Benjamin Спасибо, что привлекли мое внимание к этому, он обновлен.
Эндрю
Разве не имеет смысла развернуть в любом удаленном репозитории (для сохранения истории резервного копирования коммитов) и использовать git-ловушку для простой синхронизации с корзиной S3 (например:) s3cmd sync …?
Fabien Snauwaert
Вот шаги: metamug.com/article/jgit-host-git-repository-on-s3.php
Сортировщик

Ответы:

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 не поддерживает слияние или вытягивание), вы делаете это в два шага:

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

Это оно! содержимое вашей амазонской корзины "mybucket" теперь должно быть доступно для чтения и записи в / mnt

Riceball LEE
источник
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? Это похоже на много дополнительной работы / вещей только для простого удаленного репозитория git на aws ...
cmcculloh
1
Я бы предложил обновить этот (настоящий) ответ, чтобы сделать еще один шаг с помощью post-receiveкрючка, проверяющего GIT_WORK_TREE. Подробнее см. Здесь . В итоге у меня получилось неплохо с этим работать s3fs. Настоятельно рекомендуется и спасибо за помощь в начале работы.
bnjmn
1
@cmculloh, если у вас еще нет экземпляра EC2, это может быть больше проблем и стоить в долгосрочной перспективе просто иметь репозиторий git. Также хранилище S3 по умолчанию намного долговечнее; чтобы получить такую ​​же долговечность на EC2, вам все равно придется делать резервную копию снимков до S3
Джереми
1
Похоже, сообщение в блоге было обновлено, чтобы сделать страницу проекта jgit ссылкой на репозиторий проекта egit [ eclipse.org/egit/] , и это сбивает с толку все решение. После небольшого поиска я смог найти исходную страницу проекта jgit, откуда jgit.sh можно загрузить и использовать. Ссылка eclipse.org/jgit/download для всех, кому она может понадобиться в будущем.
MN Islam Shihan
9

Dandelion - еще один инструмент командной строки, который будет синхронизировать репозитории Git с S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion

scttnlsn
источник
Не знаю, кто проголосовал против. Я думаю, что это решение хорошо, если целью является инкрементное развертывание вместе с git для управления локальными версиями и S3 для хостинга. Вот в чем, кажется, вопрос.
Табрез 02
8

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

Тебе просто нужно бежать git-s3 deploy

Он обладает всеми преимуществами репозитория git и загружает / удаляет только те файлы, которые вы изменили.
Примечание. Развертывание не подразумевается с помощью git push, но вы можете добиться этого с помощью ловушки git.

шиклинг
источник
14
К вашему сведению, это зависит от 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

koolhead17
источник
3

Вы также можете сделать это с помощью AWS CLI и Git (с хуками). Проверено, работает на Windows 10. Должен работать на Linux / Mac.

Настроить синхронизацию с S3 при фиксации

  1. Установить AWS CLI
  2. Настройте учетные данные программного доступа к IAM (вы можете ограничиться S3 или даже сегментом).
  3. Настройте AWS CLI с учетными данными
  4. Создайте корзину S3 в консоли AWS или в интерфейсе командной строки.
  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. Теперь перейдите в свой myprojectкаталог и добавьте голое репо в качестве восходящего потока, назовите его, s3например:
git remote add s3 path/to/bare/directory/myproject.git 

ПРИМЕЧАНИЕ. Вы можете использовать относительный путь для пути к пустому каталогу.

Тестирование

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

Ссылки:

b01
источник
Это нормально, если у вас уже установлены 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.

Вот как будет выглядеть ваш URL-адрес git.

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

Вы можете делать все , что вы делаете с gitс jgit.

Получите полное руководство по установке здесь.

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

Сортировщик
источник