Вот так я сделал развертывание веб-приложения.
Имеется:
1) машина разработчика (Windows)
2) сервер SOURCE, где хранится исходный код (Windows + VisualSVN)
3) сервер SITE.RU с сайтом, и есть ftp
Что делаем на сервере SOURCE
- создаем структуру папок, типа
D:\code\deploy\project\svn_export — сюда будет экспортироваться код из svn
D:\code\deploy\project\replace — в этой папке хранятся файлы, которые нужно заменить перед отправкой на сайт (типа паролей к базе и т.д.) - Устанавливаем Core FTP, создаем и сохраняем в нем профиль siteru для доступа к сайту
- Кладем на сервер батник примерно следующего содержания:
set TMP_DIR=D:\code\deploy\project\svn_export
set OVERWRITE_DIR=D:\code\deploy\project\replaceset REPO=http://SOURCE/svn/project/trunk/
set REPO_USER=user
set REPO_PASS=passset PROD_SERVER=siteru
set PROD_DIR=/html/set FTP_CLIENT="c:\program files\coreftp\coreftp.exe"
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: очистить временную папку экспорта
del "%TMP_DIR%\*" /Q
rmdir "%TMP_DIR%" /S /Q: залить head ревизию из репозитория во временную папку
svn export --username "%REPO_USER%" --password "%REPO_PASS%" "%REPO%" "%TMP_DIR%": перезаписать некоторые файлы
xcopy /Y /E %OVERWRITE_DIR% %TMP_DIR%: загрузить по ftp
%FTP_CLIENT% -s -O -site %PROD_SERVER% -u %TMP_DIR%\ -p %PROD_DIR%
Теперь можно, потестировав батник, прописать путь к нему в post-commit
репозитория, и после каждого коммита в репозиторий изменения будут загружаться на сервер.
Но даже, если вы тщательно тестируете код перед отправкой, то проблемы могут возникнуть в результате случайной отправки ненужных данных, поэтому я всякое копирование изменений осуществляю вручную, удаленно запуская батник на сервере с рабочей машины.
Для этого используется PsExec:
psexec \\SOURCE d:\code\deploy\project\deploy_project.bat