Use o rsync para espelhar a origem da implantação do site, mas não exclua os arquivos selecionados no destino

1

Eu tenho trabalhado nisso por vários dias e, não importa o que eu faça, não posso fazê-lo funcionar. Eu li praticamente todos os Q & A na rede do StackExchange sobre o rsync, mas ainda não encontrei a resposta.

Basicamente, estou escrevendo uma ferramenta de implantação de site e ele usa o rsync para mover arquivos de um repositório Git de origem para implantar o Git repo; o destino. Comprometer-se com o repo implantar realmente implanta o código para o servidor web, então eu estou atrasando com o rsync entre dois diretórios diferentes.

É muito importante que todos os arquivos que o desenvolvedor excluiu no repositório de origem também sejam excluídos no repositório de implantação. No entanto, há arquivos selecionados que estão no repositório de implementação que precisam ser não excluídos. Especificamente, são arquivos fornecidos pelo provedor de hospedagem e necessários na produção, mas que são problemáticos para serem mantidos no repositório de origem.

Eu entendo pelo que li em man , aqui e em outros lugares, se eu adicionar os nomes dos arquivos que estão no repositório deploy / destination que eu quero manter em um arquivo --exclude-from

Aqui está o que eu estou fazendo, basicamente:

rsync --archive --verbose \
      --exclude ".git" --exclude ".git*" \
      --exclude-from="/tmp/excludes.txt" --delete-after \
      /dir/to/source/repo/ \
      /dir/to/deploy/repo

E, por exemplo, vamos dizer que este é o conteúdo de /tmp/excludes.txt :

/foo/bar/baz.php

Agora, quando eu tentei isso usando um exemplo trivial localmente, sempre parece funcionar como esperado. Mas quando eu usá-lo com o CircleCI em um cenário de implantação no mundo real, rsync sempre exclui /foo/bar/baz.php depois de executar o comando acima.

Você pode ver o que estou fazendo errado? Agradecemos antecipadamente.

UPDATE - O ACIMA FUNCIONA

Acontece que a lógica no meu script em execução no CircleCI era a culpa, e eu simplesmente não conseguia ver. Eu estava executando vários comandos rsync com diferentes raízes (essencialmente subdiretórios da minha raiz principal) por causa das diferentes regras necessárias, e uma lista de excluir arquivos com caminhos de arquivos que eram todos baseados na raiz principal. Ugh.

De qualquer forma, querido leitor, o resultado é que o exemplo acima funciona, na verdade, descrevendo como eu queria que funcionasse.

    
por MikeSchinkel 02.09.2018 / 20:42

1 resposta

0

Apenas para fechar o loop, se alguém ler isso quiser saber como usar o rsync para espelhar o diretório de destino com o diretório de origem , exceto para arquivos nomeados específicos , isso é como você faria:

rsync --archive --verbose \
      --exclude-from="/tmp/excludes.txt" --delete-after \
      /dir/to/source/repo/ \
      /dir/to/deploy/repo

Este é o conteúdo de /tmp/excludes.txt em que o arquivo nomeado possui um caminho de caminho completo de /dir/to/deploy/repo/foo/bar/baz.php :

/foo/bar/baz.php
    
por 02.09.2018 / 21:31