Ambos os problemas (manipular automaticamente suas implantações e evitar o trabalho inútil, por exemplo, executar uma tarefa grunt
se nada mudar) são para os quais git
hooks servem.
Então, meu conselho seria livrar-se de cron
tarefas e mudar para o gerenciamento de seus repositórios via ganchos o mais rápido possível.
A maneira como isso geralmente é feito é descrita em detalhes aqui e basicamente exige que você ter um repositório bare
(um repositório hub ) para enviar / extrair e uma versão com check-out do mesmo repositório (um live repo) localizado no repositório caminho apropriado, por exemplo, /srv/www/html
, por exemplo.
Eu gosto de usar gitolite3
para lidar com o repositório hub , mas isso não é um requisito, embora seja bastante conveniente ter fine -grained controle de acesso vinculado ao seu LDAP de escolha se for necessário.
Também é uma boa prática limitar as capacidades do usuário gitolite3
via sudo
e manipular os ganchos por meio de sudo
chamadas. Este é um exemplo de trabalho usando gitolite3
hooks (sinta-se livre para adaptá-los - ou aprimore / corrija - para atender às suas necessidades):
-
hub repo
post-update
hook:#!/bin/sh echo "****" echo "**** Calling publisher-hub2live script [Hub's post-update hook]" echo "****" sudo /usr/local/sbin/publisher-hub2live "/srv/www/html" "root:apache" "2750" "640" exit 0
-
publisher-hub2live
script:#!/bin/sh echo "****" echo "**** Pulling changes into Live [publisher-hub2live]" echo "****" cd "$1" || exit umask 0022 unset GIT_DIR /usr/bin/git pull hub master # custom actions here # e.g call grunt tasks /bin/chown -R "$2" "$1" /bin/find "$1" -type d -exec chmod "$3" {} + /bin/find "$1" -type f -exec chmod "$4" {} + /bin/chmod u+x "$1"/.git/hooks/post-commit /sbin/restorecon -R -v "$1" exec /usr/bin/git update-server-info exit 0
-
Um live repo
post-commit
hook também pode ser útil, se você fizer alterações na árvore de trabalho com check-out do live repo e quiser sincronize o hub.
Esta infraestrutura requer as seguintes entradas (ou equivalentes) no seu arquivo sudoers
:
Cmnd_Alias GITOLITE_CMDS = /usr/bin/git, /bin/chown, /bin/find, /bin/chmod, /sbin/restorecon, /usr/local/sbin/publisher-hub2live
Defaults:gitolite3 !requiretty
Defaults:gitolite3 lecture=never
gitolite3 ALL = (root)NOPASSWD: GITOLITE_CMDS
Além disso, um bloco Match
no seu sshd_config
seria útil, dependendo de como você gerencia a identidade em suas máquinas:
Match Group gitolite3
Banner /etc/issue.empty
RequiredAuthentications2 publickey
Com tudo isso funcionando, o envio para o repo hub aciona o gancho post-update
, garantindo que suas ações personalizadas sejam executadas somente quando houver algo novo.