Publicar no S3 usando Git?


87

Alguém sabe como fazer isso? Até agora não consegui encontrar nada útil no Google.

Eu realmente gostaria de configurar um repositório local e usá git push-lo para publicá-lo no S3, a ideia é ter controle de versão local sobre ativos, mas armazenamento remoto no S3.

Isso pode ser feito? Se sim, como?


1
OP, Atualmente a resposta aceita não se aplica à pergunta feita. Seria possível atualizar para o bem maior? Acredito s3fsser uma solução viável.
bnjmn

1
@Benjamin Obrigado por chamar minha atenção de volta para este, está atualizado.
Andrew

Não faria sentido implantar em qualquer repositório remoto (para preservar um histórico de backup de commits) e usar um git hook para simplesmente sincronizar com um bucket S3 (por exemplo:) s3cmd sync …?
Fabien Snauwaert

Respostas:


50

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

Baixe jgit.sh, renomeie-o para jgit e coloque-o em seu caminho (por exemplo $ HOME / bin).

Configure o arquivo de configuração .jgit e adicione o seguinte (substituindo suas chaves AWS):

$ vim ~ / .jgit

accesskey: aws access key
secretkey: aws secret access key

Observe que, ao não especificar acl: public no arquivo .jgit, os arquivos git no S3 serão privados (que é o que queríamos). Em seguida, crie um intervalo S3 para armazenar seu repositório, vamos chamá-lo de git-repos e, em seguida, crie um repositório git para fazer upload:

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

Acima, estou usando a ferramenta de linha de comando s3cmd para criar o intervalo, mas você também pode fazer isso por meio da interface da Web da Amazon. Agora vamos colocá-lo no S3 (observe como usamos o jgit sempre que interagimos com o S3, e o git padrão, caso contrário):

jgit push origin master

Agora vá para outro lugar (por exemplo, cd / tmp) e tente cloná-lo:

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

Quando chegar a hora de atualizá-lo (porque jgit não oferece suporte a merge ou pull), você o faz em 2 etapas:

cd chef-recipes
jgit fetch
git merge origin/master

2 Use o sistema de arquivos baseado em FUSE apoiado pelo Amazon S3

  1. Obtenha uma conta Amazon S3!

  2. Baixe, compile e instale. (veja notas de instalação)

  3. Especifique suas credenciais de segurança (ID da chave de acesso e chave de acesso secreta) por um dos seguintes métodos:

    • usando a opção de linha de comando passwd_file

    • definir as variáveis ​​de ambiente AWSACCESSKEYID e AWSSECRETACCESSKEY

    • usando um arquivo .passwd-s3fs em seu diretório inicial

    • usando o arquivo / etc / passwd-s3fs de todo o sistema

    • faça isso

.

/usr/bin/s3fs mybucket /mnt

É isso aí! o conteúdo do seu balde amazon "mybucket" agora deve estar acessível para leitura / gravação em / mnt


1
Segui essas instruções, mas recebo um The request signature we calculated does not match the signature you provided. Check your key and signing methoderro quando tento jgit push origin master. Alguma ideia de como posso fazer isso desaparecer?
João

4
Por que você simplesmente não usa o git? Isso parece muito trabalho / material extra apenas para um simples
repositório

1
Eu sugeriria atualizar esta resposta (real) para dar um passo adiante com um post-receivegancho que verifica o GIT_WORK_TREE. Veja aqui para mais detalhes. Acabei fazendo com que isso funcionasse muito bem s3fs. Altamente recomendado e obrigado por me ajudar a começar.
bnjmn

1
@cmculloh se você ainda não tem uma instância EC2, então isso pode ser mais problemático e custar a longo prazo apenas ter um repositório git. Além disso, o armazenamento S3 é muito mais durável por padrão; para obter a mesma durabilidade no EC2, você teria que fazer backup de instantâneos até S3 de qualquer maneira
Jeremy

1
Parece que a postagem do blog foi atualizada para fazer com que a página do projeto jgit se vincule ao repositório do projeto egit [ eclipse.org/egit/] e isso torna toda a solução 1 confusa para seguir. Depois de um pouco de pesquisa, encontrei a página original do projeto jgit de onde jgit.sh pode ser baixado e usado. O link é eclipse.org/jgit/download para qualquer um que precise dele no futuro.
MN Islam Shihan

9

Dandelion é outra ferramenta CLI que manterá os repositórios Git sincronizados com S3 / FTP / SFTP: http://github.com/scttnlsn/dandelion


Não tenho ideia de quem votou contra isso. Eu acho que esta solução é boa se o objetivo é ter implementações incrementais junto com git para gerenciamento de versão local e S3 para hospedagem. Essa parece ser a questão.
Tabrez

8

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

Você só tem que correr git-s3 deploy

Ele vem com todos os benefícios de um repo git e uploades / deleta apenas os arquivos que você alterou.
Observação: as implantações não estão implícitas por meio de git push, mas você pode conseguir isso por meio de um gancho git.


14
FYI, isso depende de Composer, que por sua vez depende PHP.
Maarten

3

Você pode usar o cliente mc também conhecido como Minio , escrito em Golang e disponível sob a licença Apache de código aberto. Ele está disponível para Mac, Linux, Windows, FreeBsd. Você pode usar o mc mirrorcomando para atingir seu requisito.

Download 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

Configurando mc para Amazon S3

$ mc config host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12
  • Substitua pela sua chave de acesso / secreta
  • Por padrão, o mc usa a versão 4 do Amazon S3.
  • mys3 é o alias do Amazon S3 para minio client

Espelhe o seu repositório / diretório local do github, diga o nomemygithub para o nome do bucket do Amazon S3mygithubbkp

$ ./mc mirror mygithub mys3/mygithubbkp

Espero que ajude Disclaimer: I work for Minio


3

Você também pode fazer isso usando o AWS CLI e Git (com ganchos). Verificado em funcionamento em Windows 10. Deve funcionar em Linux / Mac.

Configure a sincronização para S3 na confirmação

  1. Instale AWS CLI
  2. Configure as credenciais de acesso programático do IAM (você pode limitar a S3 e até mesmo apenas o bucket).
  3. Configure AWS CLI com as credenciais
  4. Crie o bucket S3 no console AWS ou no CLI.
  5. Certifique-se de que o balde seja privado.
  6. Faça um novo barerepositório git de seu projeto git existente:
mkdir myproject.git
cd myproject.git
git init --bare

NOTA: Usar um repositório básico servirá como o upstream e o repo básico terá apenas as alterações que você deseja enviar para o balde S3 e não os arquivos ignorados, configurações git locais, etc.

  1. Instale este gancho como post-updateno diretório hooksvazio 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. Atualize o gancho com o nome de intervalo S3 correto.
  3. Agora faça cd em seu myprojectdiretório e adicione o repositório básico como um upstream, nomeie-o s3por exemplo:
git remote add s3 path/to/bare/directory/myproject.git 

NOTA: Você pode usar um caminho relativo para o caminho do diretório vazio.

Testando

  1. Adicione alterações ao seu repo e efetue o commit.
  2. Envie suas alterações para o s3upstream quando quiser sincronizar as alterações com seu bucket S3.
  3. Você deve ver as mudanças sincronizadas com o bucket S3 que você especificou, você também pode ver as mudanças no bucket S3 para verificar se tudo funcionou.

Referências:


Tudo bem se você já tiver o AWS CLI e o Git instalados. Ele pressupõe conhecimento do Git sobre ganchos, que você sabe como configurar usuários IAM e credenciais programáticas e fazer buckets S3.
b01

Então, eu entendi corretamente que isso tem dois repositórios localmente e o repositório local simples está configurado para se sincronizar com o s3 via pós-atualização?
Josiah

@Josiah Sim, está correto. Embora não seja necessário, ajuda a simplificar a sincronização apenas dos arquivos que você deseja no S3, uma vez que o repositório básico conterá apenas os arquivos que foram confirmados. Tentei fazer isso sem o repositório básico, mas depois tive que excluir alguns arquivos da sincronização com o S3, principalmente qualquer coisa no arquivo .gitignore.
b01

1

Você pode usar o serviço deplybot ( http://deploybot.com/ ) que é gratuito para um único repositório git.

Você pode automatizar a implantação escolhendo "automático" na seção de modo de implantação.

Estou usando agora. É muito fácil e útil.


Não é mais gratuito.
mxcl de


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.