January
8th,
2016
之前做过几个项目,项目版本发布管理都是件令人头疼的事。资源管理、程序打包有太多人工操作在里面, 只要涉及到人式操作就难免出错。使用打包脚本会减少部分操作,但是每次发版甚至是测试人员要包都很麻烦, 一着急还容易出错。一直想实现一个自动打包、发布系统,减少发布打包人为的修改操作。从页面上直接可以看到 项目各平台编译状况,测试也可以直接从上面下载安装。
架构、思路
版本管理系统
|
代码库版本变化
|
---------
| |
V V
平台编译 平台编译
服务器 服务器
|
V
编译、打包系统
|
|
V
管理服务器
|
V
结果
反向:从管理服务器发发布请求到指定平台,平台服务器再向代码仓库拉取最新代码,进行编译。
目前已经实现代码库变化,通知编译服务器编译、打包。该系统使用Erlang语言+各种脚本实现。遇到一些问题记录如下:
-
svn提交通知,repos/hooks/下面参照post-commit.tmpl写post-commit脚本
-
svn check update,
svn status -u -q
,返回结果前面带*
的是要更新的 - erlang集群端口管理
- epmd端口默认4369,使用erl的
-epmd "epmd -port 5000 -daemon"
参数调整 - 结点通讯端口使用erl的
-kernel inet_dist_listen_min 4000 inet_dist_listen_max 4000
控制 - 集群cookie必须相同, erl的
-setcookie xxxxx
可以设置,当然也可能通过HOME下.erlang.cookie
文件修改
- epmd端口默认4369,使用erl的
- 本想直接利用Erlang天然的分布式支持实现远程通知,可能因为svn服务器对外端口转发我做不了(没权限),最终没有实现。 我所在办公室做了外网端口转发的两台机器是可以实现的。理论上实现目前的功能,svn服务器只要远程调用通知我的编译服务器, 而我的服务器是做过端口转发的,应该能调到才前。不知道什么原因始终调不到。以后有时间再看是什么原因吧。也考虑过使用thrift, 但之前用过,感觉在erlang中使用不是很方便,再加上考虑到以后要有web界面展示,干脆使用ChicagoBoss实现算了。立马使用ChicagoBoss 创建工程,post-commit直接请求url通知,加上之前积累的编译、打包脚本,很快上面流程里的功能实现了。现在测试来要包立马就有新包了^_^