星期四, 十一月 01, 2007

项目自动化

《Pragmatic Project Automation》主要是针对 Java 项目的自动化建构和部署以及监控。我目前主要使用 Python,接着需要重新再学习 C,那么我需要考虑一些不同的情况。

首先,我不大可能使用象 Ant 和 CruiseControl 这样的工具,不过我想应该可以直接利用 Python 的 distutils 工具基本上也可以做这些。

首先,为了使测试能够自动化,并且编写单元测试的时候能够更加一致,也许应该调整一下目录结构。以 caxes 项目为例,目前的目录结构是:
ulfs/
caxes/
tree.py
test_tree.py
lib/
ctemplates.py
edconfig.py
sctmd.py
test/
test_ctemplates.py
test_edconfig.py
test_sctmd.py
......
但对于单元测试文件的存放就不一致了。另一个问题是,test_ctemplates.py 要 import ctemplates.py,在 sandbox 中和安装后的包路径会不一致,因为安装后显然只能是 caxes 包(或其他名字如 libcaxes,但不可能是 lib),虽然可以象这样:
try:
pwd = os.getcwd()
MODULE_PATH = os.path.dirname(pwd)
sys.path.insert(0, MODULE_PATH)
import mirrord,fs_info
sys.path.pop(0)
except ImportError:
from cutils import mirrord,fs_info
但这会导致重复增加。所以我想这样的目录结构也许更合理:
ulfs/
caxes/
lib/
tree.py
caxes/
ctemplates.py
edconfig.py
sctmd.py
test/
test_tree.py
caxes/
test_ctemplates.py
test_edconfig.py
test_sctmd.py
......
然后做一个构建脚本,在其中首先设置 PYTHONPATH,并调用 setup.py build --build-base=build/,并进入 build/ 目录自动运行所有的测试即可。例如:
#!/bin/sh
cd /opt/automated/
svn co http://crablfs.svn.sourceforge.net/svnroot/crablfs ulfs/
cd ulfs/caxes/
python setup.py build --build-base=build/
cd build/
export PYTHONPATH=`pwd`/lib
python test/test_ctemplates.py
python test/test_edconfig.py
python test/test_sctmd.py
...
当然应该能够写的更好?不过我不知道有没有 Python 下对应的工具?

另一个问题是如果将定时构建脚本的输出重定向到邮件、短信或信号灯,这应该属于监控的问题了。

另外,书中写到在安装和部署时使用诊断测试排除故障的技巧是比较有价值。

没有评论: