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