简易定制化代码部署

发布: 2013-08-27 13:32

工作一直以开发为主,最近维护测试机,
在多台测试机的时候,需要把提交的代码以不同的方式部署到不同测试节点,
在这样一个不算复杂的需求推动下,总结并实现这么一种简易部署方式。

web工程师开发流程如下,
提交代码到svn,svn钩子把代码checkout到本机,
做为本机web测试环境的nginx服务代码。

在架构简单的情况下,一台测试机足够用的情况下运行良好。
不过,随着架构调整,组件变多,一台测试机无法安装所有的服务,
如除了nginx,php外,还需要安装gearman,redis等服务。
这时需要保证最新的代码也能同时部署到安装gearman测试机上。

另外,对于当前的web开发,还有一些特殊的需求,如做js/css客户端优化功能,
而对js/css需要使用squid做前端访问缓存,又出现一种服务流程,并部署在其他测试机上。
经过上面的需求分析,实现这么个简单的测试部署方式,
svn提交+svn钩子+http通知+shell/php处理事件通知。

首先,提交代码模式不变,
在需求部署的测试机上安装nginx+php服务,作为通知服务执行,
在php中,配置当前机器需要处理的项目列表,
查找项目的部署脚本代码,执行部署过程。

代码目录结构:
[root@test003 trunk]# tree
├── deploy.d
│ ├── deploy.qtchina.net.sh
│ ├── dojquery.qtchina.net.sh
│ ├── functions.sh
│ ├── gearman.qtchina.net.sh
│ └── slae.qtchina.net.sh
├── deployd_impl.sh
├── deployd.php
├── r.js
├── squidclear.php
├── squidpurge
│ └── SquidPurge.php
└── squidpurge.php


代码的大概执行流程,
svn 钩子 -> curl http://x.x.x.x/deployd.php -> deployd_impl.sh ->
functions.sh -> xxx.qtchina.net.sh --> (r.js | squidpurge) -> response
代码的部署,要么是推送模式,要么是拉取模式,这里使用的是拉取模式。
也比较直接,安装方便,充分利用现有的服务。

通过代码归类的方式,比较好的解决了定制化部署不同项目的问题。
其他更成熟复杂的部署方式,像使用一些成熟稳定的运维工具nagois等当然也能很容易的实现,
只是再装那么多东西,不专业做运维,感觉会加大测试机的维护量。



原文: http://qtchina.tk/?q=node/760

Powered by zexport