2012-02-28 51 views
2

我有计划建立一个SVN服务器用于测试目的。 现在是我的问题。 我如何自动将提交的文件部署到我的开发/登台网站的路径?我如何自动部署提交到网站?

我已经发现我可以在SVN中使用post-commit hook,但我该如何配置?

所有提交的文件必须在路径中部署http://dev.staging.mywebsite.com: /家庭/ WWW的/ dev /分期/

和存储库位于: /家庭/ SVN/mytestscript/

我该怎么做?

+0

我认为即使在临时服务器上,部署网站的post-commit挂钩也是一个坏主意。有专门用于部署的构建工具,我只使用Maven,但其中还有其他许多工具,如Ant。 – StuR 2012-02-28 15:15:37

+1

不好主意,但你有这个想法吗? – Aar 2012-02-28 15:31:30

+0

你可以尝试这个链接,我想你将不得不编写一个部署脚本: https://mikewest.org/2006/06/subversion-post-commit-hooks-101 – mpm 2012-02-28 15:40:35

回答

0

编写一个用于部署的post-commit hook是一个不错的主意。

更好的解决方案是使用像Capistrano(Ruby)或Fabric(Python)的工具。

+0

你的理由是什么?检查您的网站并没有那么糟糕,您承诺了什么? 你的观点是什么? – Aar 2012-02-28 17:51:54

+0

尼古拉斯是正确的。看到我的[回复](http://stackoverflow.com/a/9489149/368630)。 – 2012-02-28 21:15:42

0
  1. svn diff --summarize in post-commit hooks。 Details here

  2. 替代选择1(大转移,更多的时间和停电) - SVN导出+删除+复印件出口树

  3. 替代选择2所有旧的数据 - 临时站点是额外的工作拷贝,post-commit钩子它发起svn up

9

尼古拉斯丁:这真是一个坏主意,写部署post-commit钩子。

Aar:你有什么原因?检查您的网站并没有那么糟糕,您承诺了什么?你的观点是什么?

我必须同意Nicholas Ding。问题在于,当您通过post-commit挂钩进行部署时,开发人员正在等待提交完成。如果您的部署只需30秒即可完成,那么开发人员正在等待您的提交后挂接完成时间为30秒。

如果每次开发者提交一个文件,他们必须等待30秒才能完成该提交,您认为会发生什么?你认为他们会如何看待Subversion,一般的开发过程以及你作为CM?将你的部署做为post-commit hook并不完全是一个职业增强的举措。


我建议你看看Jenkins。詹金斯是所谓的连续构建系统。您可以设置Jenkins,以便每次开发人员进行提交时,Jenkins都会执行构建。这样,当你的部署发生时,你不会捆绑Subversion。

好的是,詹金斯也可以做你的部署。而且,如果部署失败,它可以向做出提交的开发人员发送电子邮件。詹金斯甚至可以为你运行一些测试。例如,也许你的部署工作,但更改后的代码会导致错误。这可能是很好的检测。而且,您可以在Jenkins中存储可部署的工件,以便在部署之前对其进行测试。如果测试有效,您可以返回到Jenkins的构建版本,单击按钮并执行部署。作为另一个好处,Jenkins允许开发人员查看所有更改,构建和部署的历史记录。一旦您开始测试,它也可以显示所有测试的历史记录。如果您使用Jira,Bugzilla,MantisBF,Track或任何其他流行的问题跟踪系统,Jenkins可以与这些系统进行集成,以帮助您跟踪哪些构建特定问题得到处理。

即使你不需要编译任何东西(比方说你的整个网页只是PHP文件和JavaScript),你可以使用Jenkins进行部署和测试,并且仍然可以看到很多好处。

Jenkins是一款非常棒的软件,它可以真正改善您的开发过程并且在不降低Subversion的情况下处理您的问题。另外,Jenkins非常易于使用,因此使用Jenkins可能会比使用post-commit钩子时想要做的事更快。

+0

您可以通过让钩子关闭部署过程来避开提交延迟,但是当然如果部署失败,您将失去拒绝提交的能力。我认为使用詹金斯是一个更强大和明智的解决方案。 – TMN 2012-02-28 20:37:25