Задача: организовать обновление сайтов на удаленных серверах после коммита
Как реализовано сейчас:
Для проекта создан хук post-receive. Когда я делаю коммит в соответствующую ветку файлы выгружаются в локальную директорию:
git --work-tree=/var/www/test.com --git-dir=/var/opt/gitlab/git-data/repositories/test/test-project.git/ clean -fd
git --work-tree=/var/www/test.com --git-dir=/var/opt/gitlab/git-data/repositories/test/test-project.git/ checkout -f
Если все хорошо (тесты пройдены), в Гитлаб запускается раннер, который делает:
lftp -e "mirror --delete --exclude \public_html/config.php --exclude \.gitlab-ci.yaml --exclude \public_html/img/. -R /var/www/test.com / ; quit;" -u ftp-user,ftp-password ftp://xxx.xxx.x.xxx:21
Загвоздка в удалении файлов. Сейчас, если я удалил какой-то файл из проекта, то он сперва удаляется из папки где локально развернут сайт (/var/www/test.com), а затем с удаленного сервера. Но при этом, если на удаленном сервере есть свои какие-то файлы, которых нет в Git-проекте, lftp их тоже удаляет, чего быть не должно.