使用Git进行PHP部署。如何使其更加自动化?

15
我负责启动Web项目,但目前从客户签署到最终启动需要的时间有点长。服务器是我拥有根访问权限的,但运行Plesk以便老板可以设置VirtualHosts,这意味着许多网站都在其上运行。
每个项目都有自己的git存储库,所以我目前的设置如下:
在我的预发布服务器上有一个克隆的repo和两个裸体的repo。一个在Forge(由Indefero提供支持),另一个在生产服务器上。
每个项目的每个版本都使用今天的日期进行标记,例如“ git tag-a deployed-2011-04-20”。
因此,在预发布服务器上,我执行类似于“ git push--tags live master”的操作,该操作针对生产服务器上的裸体repo。
然后,在live服务器上通过SSH执行一个简短的bash脚本,该脚本基本上将存储库从live裸体repo克隆到Apache将服务的文件夹中。
因此,如果这一切都是有意义的,您能否推荐一个工具或任何可以遵循该工作流程或适应该工作流程以使我的生活更轻松的东西?
Forge (authoritative source)
  ^
  |
  v
Staging/development server
  |
  v
Live server bare repo
  |
  v
Releases folder (symlinked to htdocs)
4个回答

2
一种解决方案是在实时服务器裸仓库上添加一些 post-receive 钩子,以便检测来自暂存库的 deployed-2011-xx-yy 标签,并从那里触发 ssh 脚本。
另一个解决方案是拥有一个调度程序(如 pderaaij答案 中提到的 Hudson),以便:
- 监视暂存库,并在正确的标签上触发对实时服务器的推送 - 监视实时裸仓库,并触发 ssh 脚本。
第二种解决方案的优点是在 Hudson 作业报告中保留所有发布实例的记录,每次该作业检测到正确的标签并执行发布过程时都会记录。

请问VonC能否分享一下上述内容的示例?在生产服务器裸库中添加一些post-receive钩子,以便检测来自暂存库的任何已部署的2011-xx-yy标签,并从那里触发ssh脚本。 - MEM

2
看看Capistrano,它可以愉快地执行您在此处描述的符号链接操作。

你能详细说明一下它在维护这个git工作流方面的能力吗?符号链接是整个过程中最容易的部分! :-) - Treffynnon
虽然它是一种通用的部署工具,但内置的配方(以及来自 capitate 的配方)可以轻松地执行 git push,然后在一个或多个环境中运行与您的脚本相当的操作(在您的情况下为暂存和生产环境)。 - Ben Stiglitz

1

我们为几个Drupal网站开发,我们是一个由4名开发人员和20多名非技术内容管理人员组成的团队。

每个开发人员都有自己的开发环境,我们都有一个测试代码集成和性能的beta环境,一个内容管理人员在推送到生产环境之前测试功能的staging环境,一个用于培训人员的培训环境以及一个专门用于可用性测试的环境。

所有这些都是在一个中央服务器上设置的仅有1个裸库,其中每个环境都是一个分支。我们使用post-receive hook和无密码ssh证书,在基于类似以下情况语句的情况下自动拉取适当的repo:

BRANCH=`echo $line |  sed 's/.*\///g'`
LOG="`date` - updating $BRANCH instance"
case $BRANCH in
  "beta" )
    ssh www-data@beta "cd /var/www/beta.example.com; git pull"
    ;;

1
如果您使用Hudson作为持续集成服务器,您可以利用构建管道插件。
您有正常的构建过程,但添加一个额外的任务,其中包含部署应用程序的命令。该插件为您提供了一个漂亮的按钮来执行该构建。
Hudson作业可以执行所有必需的命令,或者您可以查看Maven for PHP并使用可用的插件调用远程脚本。
也许考虑到您已经选择的路径,这有点超出范围,但这值得研究。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接