Usando o sudo em um gancho do Git para definir permissões depois de implantar

2

Eu corri alguns sites no Ubuntu e estou configurando um novo fluxo de trabalho de implantação da seguinte forma (o exemplo usa o ambiente de preparação):

Na minha máquina dev, eu faço git push staging , que envia para um repositório vazio e aciona o post-receive hook, que faz essas coisas:

  • Finalize o projeto em uma pasta separada
  • Backup do diretório implantado atual
  • Implemente os arquivos com o rsync
  • Defina as permissões apropriadas usando um post_deploy.sh script

O acima está funcionando bem, exceto a parte de configuração das permissões.

Como preciso usar sudo para fazer um chgrp e chown , tentei adicionar o seguinte a /etc/sudoers :

myusername ALL=(ALL:ALL) NOPASSWD: /path/to/post_deploy.sh

Mas ao executar o git push , recebo este erro:

remote: sudo: no tty present and no askpass program specified

Se eu executar post_deploy.sh diretamente do servidor implantado, não tenho problemas.

Como posso executar o script post_deploy.sh do gancho git? Eu não me importo de ter que digitar uma senha extra, mas pelo que eu li a coisa askpass não é para a linha de comando (estou certo?).

    
por Schrute 01.10.2014 / 18:27

1 resposta

2

Este é um problema com o arquivo / etc / sudoers, onde tem a seguinte entrada:

Defaults requiretty

Ele está detalhado em ESTE POST

Existem duas opções, comente a configuração Defaults requiretty do / etc / sudoers ou use o argumento de alocação pseudo-tty ( -t ) para ssh .

Tente o seguinte no seu script de pós-recebimento:

ssh -t 127.0.0.1 "sudo chown user /path/to/pushfile"

Embora você tenha que ter ssh chaves pré-compartilhadas configuradas para você mesmo e executá-las uma vez manualmente para adicionar uma entrada a hosts conhecidos (ou encontrar o argumento para ignorar isso).

    
por 02.10.2014 / 12:01