svn deploy windows

Вот так я сделал развертывание веб-приложения.

Имеется:
1) машина разработчика (Windows)
2) сервер SOURCE, где хранится исходный код (Windows + VisualSVN)
3) сервер SITE.RU с сайтом, и есть ftp

Что делаем на сервере SOURCE

  1. создаем структуру папок, типа
    D:\code\deploy\project\svn_export — сюда будет экспортироваться код из svn
    D:\code\deploy\project\replace — в этой папке хранятся файлы, которые нужно заменить перед отправкой на сайт (типа паролей к базе и т.д.)

  2. Устанавливаем Core FTP, создаем и сохраняем в нем профиль siteru для доступа к сайту
  3. Кладем на сервер батник примерно следующего содержания:

    set TMP_DIR=D:\code\deploy\project\svn_export
    set OVERWRITE_DIR=D:\code\deploy\project\replace

    set REPO=http://SOURCE/svn/project/trunk/
    set REPO_USER=user
    set REPO_PASS=pass

    set 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