清單 2. /service/cruisecontrol/run 的內容
#!/bin/sh svc=`pwd` cd /home/cruise exec 2>&1 exec setuidgid cruise \ envdir ${svc}/env \ java -jar pkg/cruisecontrol-2.2.1/main/dist/cruisecontrol.jar
這個腳本相當簡單。它執行以下這些步驟:
保存服務目錄的名稱(在這個示例中是 /service/cruisecontrol)留待后用。 把當前目錄變為 /home/cruise。 讓標準錯誤流寫入到multilog進程的管道,這個管道已經連接到了標準輸出流。 啟動 JVM,運行 CruiseControl,以cruise這個用戶身份運行進程,并根據 /service/cruisecontrol/env 目錄中創建的文件設置環境。清單 3 演示了 /service/cruisecontrol/log/run 腳本,它更簡單。它以cruise用戶的身份運行multilog:
清單 3. /service/cruisecontrol/log/run 的內容
#!/bin/sh exec setuidgid cruise multilog /home/cruise/log/cruisecontrol
請注意,必須使用chmod把兩個腳本變成可執行的。而且,這兩個腳本都要小心地使用exec外殼命令,這個命令用一個程序替代另一個程序,但是沒有創建新進程。這一點很重要,因為supervise只能管理自己的直接子進程。如果沒有使用exec,那么 JVM 會作為執行 run 腳本的外殼的一個子進程啟動。如果向supervise發送了殺死其子進程的信息,那么外殼會接收到信號并退出,但是 JVM 會繼續運行,從而變成孤兒。supervise并不會知道這一點,所以可能會接著啟動守護程序的第二個拷貝 —— 這并不是想要的結果。
在設置好服務目錄之后,可以把它改名,刪除前導點號。然后svscan就會自動啟動 CruiseControl,它的輸出也會出現在日志文件中:
[root@fcvm .cruisecontrol]#cd ..[root@fcvm service]#mv .cruisecontrol cruisecontrol[root@fcvm service]#cat /home/cruise/log/cruisecontrol/current[cc]Aug-24 21:45:45 Main - CruiseControl Version 2.2.1 [cc]Aug-24 21:45:46 trolController- projectName = [xstream] [cc]Aug-24 21:45:46 Project - Project xstream: reading settings from config file [/home/cruise/config.xml] [cc]Aug-24 21:45:47 BuildQueue - BuildQueue started [cc]Aug-24 21:45:47 Project - Project xstream starting [cc]Aug-24 21:45:47 Project - Project xstream: idle [cc]Aug-24 21:45:47 Project - Project xstream started [cc]Aug-24 21:45:47 Project - Project xstream: next build in 1 hours [cc]Aug-24 21:45:47 Project - Project xstream: waiting for next time to build [root@fcvm service]#
簡化 CruiseControl 的配置
現在已經讓 CruiseControl 自動運行在一個很好的受控環境中。下面要做的就是向配置中添加自己的項目。正如所料,config.xml 文件中的項目看起來非常相似,不同之處只是要用哪個工具來構建項目的細節?梢栽谖谋揪庉嬈髦杏每截愓迟N的方式手工維護 config.xml 文件,但是一種更少出錯的技術是使用 XSLT 樣式表從更簡單的 XML 文檔生成 config.xml 文件。實現這個方案的文件集合已經合成了一個可以下載的壓縮 tar 文件(請參閱下載)。請解壓縮這些文件到 /home/cruise 目錄:
[cruise@fcvm ~]$lsconfig.xml force-build pkg xstream.ser cruisecontrol.log log src [cruise@fcvm ~]$tar xvzf[...]/simple-cc.tar.gzmeta-config-params.xsl meta-config.xsl meta-config.xml mkconfig [cruise@fcvm ~]$lsconfig.xml meta-config-params.xsl pkg cruisecontrol.log meta-config.xml src force-build meta-config.xsl xstream.ser log mkconfig [cruise@fcvm ~]$
簡化的配置文件名為 meta-config.xml。這個文件要用 meta-config.xsl 樣式表進行變換,生成 CruiseControl 的 config.xml 文件。叫作mkconfig的簡單腳本用早先安裝的 XMLStarlet 工具執行轉換操作。請運行mkconfig重新生成 CruiseControl 的 config.xml 文件。
構建監視
前面開始的簡單 CruiseControl 配置對于讓第一個構建工作來說足夠了,但是對于監視構建過程來說還不夠。最常見的需求是把集成構建的結果通過電子郵件發送給相關開發人員。meta-config.xsl 樣式表生成發送電子郵件消息的配置,但是要做到這一點,它需要一些本地環境變量的信息。它必須知道的許多變量要從 meta-config-params.xsl 文件讀;在開始之前應該根據實際情況修改這個文件。這個文件中的設置如下所示:
文章來源于領測軟件測試網 http://www.k11sc111.com/