В настоящее время у меня около 5 серверов, один из которых я хотел бы использовать в качестве SVN-сервера в целях разработки, но я хочу, чтобы он мог обновлять внешний сервер, например, копировать зафиксированные файлы на внешний сервер через FTP (или любой другой охранник перевод).
В основном, когда я совершаю фиксацию на своем сервере SVN с необходимыми изменениями файлов, он должен копировать эти файлы с сервера SVN на мой основной сайт. Есть ли какой-нибудь способ сделать это?
Я использую nginx и Ubuntu 11.04.
Похоже, с тем, что вы ищете, лучше всего справится Скрипт перехвата SVN. Скрипты хуков в основном существуют на сервере SVN и могут использоваться для автоматического выполнения действий, таких как выполнение и обновление файлов.
Хотя в вашем вопросе упоминается FTP, я настоятельно рекомендую вам использовать вместо этого ssh / scp / rsync. Вы могли бы просто использовать SSH-скрипт и запустить экспорт / проверку svn в другой системе.
Использовать инструмент сборки (Ant, Maven, что угодно) и инструмент непрерывной интеграции (CruiseControl, CruiseControl.rb, Hudson и т. Д.).
Не используйте хуки для развертывания если кто-то порекомендует. Конкретно в этом случае крючки подход ошибочен по нескольким причинам:
Все, что вам нужно, это:
Лично я использую Ant и CruiseControl.rb для описанной вами цели. Вот пример сценария сборки для развертывания моих изменений по протоколу ftp:
<?xml version="1.0"?>
<project name="myproject" default="deploy-local">
<property file="build.properties"/>
<target name="deploy-local">
<echo message="Deploying version ${version}" />
<delete dir="${deploy.path.local}" />
<copy todir="${deploy.path.local}">
<fileset dir="." includes="**/*" >
<exclude name=".svn/**" />
<exclude name="build.*" />
</fileset>
</copy>
</target>
<target name="deploy-remote">
<echo message="Deploying project" />
<ftp action="del"
server="${deploy.remote.server}"
userid="${deploy.remote.login}"
password="${deploy.remote.pass}">
<fileset>
<include name="${deploy.path.remote}"/>
</fileset>
</ftp>
<ftp action="mkdir"
server="${deploy.remote.server}"
userid="${deploy.remote.login}"
password="${deploy.remote.pass}"
remotedir="${deploy.path.remote}">
</ftp>
<ftp server="${deploy.remote.server}"
userid="${deploy.remote.login}"
password="${deploy.remote.pass}"
remotedir="${deploy.path.remote}"
passive="yes">
<fileset dir="." includes="**/*" >
<exclude name=".svn/**" />
<exclude name="build.*" />
</fileset>
</ftp>
</target>
</project>
build.properties
файл имеет следующее содержимое:
deploy.path.local = C:\\apache\\htdocs\\myproject
deploy.path.remote = /http/deploy
deploy.remote.server = ftp.myproject.com
deploy.remote.login = mylogin
deploy.remote.pass = mypass
Я бы рекомендовал потратить некоторое время на изучение основ управления сборкой (Ant) и непрерывной интеграции (CruiseControl), чтобы выполнить развертывание наиболее подходящим способом. Хотя это может показаться немного более сложным, это правильный поступок.