Для деплоя на тестовый и продакшн сервера в .gitlab-ci.yml использую lftp.
stages:
- deploy
deploy_staging:
stage: deploy
script:
- echo "Deploy to staging server"
- apt-get update -qq && apt-get install -y -qq lftp
- lftp -c "set ftp:ssl-allow no; open -u $USERNAME,$PASSWORD $HOST; mirror -Rnev ./ /domains/www/private_html/staging/ --ignore-time --parallel=10 --exclude-glob .git* --exclude .git/ --exclude staging/ --exclude /sitemap.xml"
only:
- develop-production
deploy_prod:
stage: deploy
script:
- echo "Deploy to production server"
- apt-get update -qq && apt-get install -y -qq lftp
- lftp -c "set ftp:ssl-allow no; open -u $USERNAME,$PASSWORD $HOST; mirror -Rnev ./ /domains/www/private_html/ --ignore-time --parallel=10 --exclude-glob .git* --exclude .git/ --exclude staging/ --exclude /sitemap.xml"
when: manual
only:
- master
И все работает, но при этом, если на продакшн сервере есть свои какие-то файлы, которых нет в Git-проекте, lftp их тоже удаляет, чего быть не должно.
А как правильно сконфигурировать git-ftp в .gitlab-ci.yml?
В таком виде gitlab не принимает:
deploy_prod:
stage: deploy
script:
- echo "Deploy to production server"
- apt-get update -qq && apt-get install -y -qq git-ftp
- git ftp init --user $USERNAME --password $PASSWORD ftp://***.com