持续集成要求的构建是开发每次提交代码,都会触发构建,而不是一些软件公司常用的定时触发(比如每隔一个小时),如果构建失败会发送邮件给导致构建失败的相关人员,要求其立即修复;如果构建成功,则将构建结果发布到Alpha场所,供后续的测试、试用、验收工作使用。修复失败的构建是所有任务中优先级最高的。 对于如何做到每次提交代码触发构建,Hudson提供了一个很好的API:Hudson Remote Access API。我们可以利用这个API和SVN的post-commit hook结合,相关的脚本示例如下:post-commit.bat
SET REPOS=%1 SET REV=%2 SET CSCRIPT=C:\WINDOWS\system32\cscript.exe SET VBSCRIPT=E:\Document\hooks\post-commit-hook-hudson.vbs SET SVNLOOK=D:\opt\Subversion\bin\svnlook.exe SET HUDSON=http://127.0.0.1/hudson/job/code%E6%9E%84%E5%BB%BA%E5%92%8C%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/ "%CSCRIPT%" "%VBSCRIPT%" "%REPOS%" %REV% "%SVNLOOK%" "%HUDSON%" |
post-commit-hook-hudson.vbs
repos = WScript.Arguments.Item(0) rev = WScript.Arguments.Item(1) svnlook = WScript.Arguments.Item(2) hudson = WScript.Arguments.Item(3) Set shell = WScript.CreateObject("WScript.Shell") Set uuidExec = shell.Exec(svnlook & " uuid " & repos) Do Until uuidExec.StdOut.AtEndOfStream uuid = uuidExec.StdOut.ReadLine() Loop Wscript.Echo "uuid=" & uuid Set changedExec = shell.Exec(svnlook & " changed --revision " & rev & " " & repos) Do Until changedExec.StdOut.AtEndOfStream changed = changed + changedExec.StdOut.ReadLine() + Chr(10) Loop Wscript.Echo "changed=" & changed change=CStr(changed) a=InStr(change,"trunk/code/") url = "http://127.0.0.1/hudson/job/code%E6%9E%84%E5%BB%BA%E5%92%8C%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/build?token=testanddevelop" Wscript.Echo url if a>0 then Set http = CreateObject("Microsoft.XMLHTTP") http.open "POST", url, False http.setRequestHeader "Content-Type","text/plain;charset=UTF-8" http.send changed set http = nothing end if set repos = nothing set rev =nothing set svnlook = nothing set hudson = nothing set shell = nothing set uuidExec = nothing set changeExec = nothing set change = nothing set a = nothing set url = nothing |
更多的关于构建的知识,推荐这个系列文章: 软件工程进阶之每日构建 (墙外)。 三. Alpha场所 Alpha场所是一个地方,里面有一堆东西,常见的包括Alpha安装包,构建后的产物,Alpha应用等等。所有的这些东西都有一个共同的愿景: 就是降低测试和升级Jar包的难度,一直降低,直到:公司的任何一个人(甚至客户),只要愿意,都可以方便的进行试用,测试和验收等工作,就像使用测试一个网站那样方便。 一般来说,Alpha场所里面的东西是经过构建,或冒烟测试后所得的产物,但这个Alpha的愿景更多的表示,公司内部可以非常方便的获取这些构建结果,以达到及时响应,快速反馈的目的。比如Alpha安装包基本上相当于一个普通的安装包和一个方便的Update工具,而Alpha Web应用就更方便了,每次构建成功后都会自动推送热部署到Tomcat下的该应用,任何人只需打开浏览器访问该应用,都能获得最新的功能体验。 四. 冒烟测试 冒烟测试是收到构建成功后放到Alpha场所的二进制包,在其他测试验收活动开始之前进行的简单测试,只包括最基本的功能,一般每天早上过来跑一次,因此叫做每日冒烟测试。 为什么要有冒烟测试? 我可以举一个没有冒烟测试之前的例子。有一段时间,开发组经常进行大规模的代码重构,并且导致很多基础的功能用不了,并且因此更多的依赖这些基础功能的测试工作也无法开展,按照持续集成的指导原则来说,越早的集成和测试越好,但是这样测试工作一下子就被阻滞了。原先想的办法是,提交紧急BUG,让开发优先修复,但后来发现根本不起作用,因为紧急只空留一个名义上的紧急,但实际处理的时候,可能还是要好几天才会得到处理。后来通过将那些最影响其他测试工作的项,组织成冒烟测试条目,并约定:如果冒烟测试失败,需要当天立刻修复,每一测试项都会对应有一个开发人员。
相关链接: