我已经阅读了一段时间并得到了一些答案,但我只需要一些帮助。
我正在尝试在将某个更改集提交到分支时自动部署网站,因此我从不同的分支发布了不同的版本。例如,有一个实时分支,无论何时更新,新的变更集都会合并到当前的实时网站中。
我的存储库(在Subversion版本控制系统上)与实时服务器位于同一服务器上,因此我需要做的就是将文件传输到另一个目录。
我知道我需要编辑repo / hooks / post-commit文件,我有这个工作,但我不确定这个文件的内容是否需要做我需要做的事。
答案 0 :(得分:5)
不要将钩子用于部署目的。使用构建工具(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)的基础知识,以便以最合适的方式执行部署。即使它似乎不是你所要求的而且更复杂,但这是正确的做法。