首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

持續整合 (CI) 實戰精要:Hudson + Ant + Subversion 打造自動化品質防線

     編輯:Java 相關知識

持續整合 (Continuous Integration, CI) 的核心價值在於「頻繁整合、快速回饋、早期發現缺陷」。本教學以 Hudson CI 伺服器、Ant 建構腳本、Subversion 版控 為鐵三角,手把手建構一條包含編譯、單元測試 (JUnit)、靜態分析 (PMD, FindBugs)、趨勢圖表、失敗通知的完整自動化管線。

CI 三大支柱與開發節奏

  • 自動化建構:Ant build.xml 定義可重複、無手工依賴的編譯/測試/檢查/打包流程。
  • 版本控制 (SCM):Subversion 集中式倉庫,Hudson 輪詢偵測變更。
  • CI 伺服器:Hudson 監控 SCM → 觸發建構 → 收集報表 → 通知相關人。

推薦開發節奏:更新沙箱 → 修改代碼 → 撰寫測試 → 本地跑建構 (確保綠燈) → 更新再跑 → 提交。CI 只是安全網,本地驗證才是第一道防線。

Ant 建構腳本模組化設計 (關鍵片段)

1. 屬性集中管理與類路徑動態掃描

<property name="lib.dir" value="${basedir}/lib" />
<property name="source.dir" value="src/java" />
<property name="test.source.dir" value="test/java" />
<property name="test.pattern" value="**/*Test.java" />

<target name="init">
  <mkdir dir="${classes.dir}" />
  <mkdir dir="${test.classes.dir}" />
  <path id="build.classpath">
    <fileset dir="${lib.dir}"><include name="**/*.jar" /></fileset>
  </path>
</target>

2. 編譯主代碼與測試代碼分離

<target name="compile-source" depends="init">
  <javac destdir="${classes.dir}" srcdir="${source.dir}" classpathref="build.classpath" />
</target>
<target name="compile-tests" depends="compile-source">
  <javac destdir="${test.classes.dir}" srcdir="${test.source.dir}" classpathref="build.classpath">
    <pathelement path="${classes.dir}" />
  </javac>
</target>

3. JUnit 測試執行與 XML 報表

<target name="test" depends="compile-tests">
  <mkdir dir="${test.report.dir}" />
  <junit printsummary="on" fork="true" haltonfailure="true">
    <formatter type="xml" />
    <classpath><path refid="build.classpath" /><pathelement path="${test.classes.dir}" /><pathelement path="${classes.dir}" /></classpath>
    <batchtest todir="${test.report.dir}"><fileset dir="${test.source.dir}"><include name="${test.pattern}" /></fileset></batchtest>
  </junit>
</target>

4. PMD 靜態分析 (原始碼層面)

<target name="pmd" depends="init">
  <taskdef name="pmd" classname="net.sourceforge.pmd.ant.PMDTask" classpathref="build.classpath" />
  <pmd>
    <ruleset>rulesets/basic.xml</ruleset> <!-- 依需求選擇規則集 -->
    <formatter type="xml" toFile="${default.target.dir}/pmd_report.xml" />
    <fileset dir="${source.dir}"><include name="**/*.java" /></fileset>
  </pmd>
</target>

5. FindBugs 位元碼掃描 (需先生成 Jar)

<target name="jar" depends="test">
  <jar jarfile="${default.target.dir}/project.jar" basedir="${classes.dir}" />
</target>
<target name="findbugs" depends="jar">
  <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref="build.classpath" />
  <findbugs output="xml" outputFile="${default.target.dir}/findbugs.xml">
    <sourcePath path="${source.dir}" />
    <class location="${default.target.dir}/project.jar" />
  </findbugs>
</target>

Hudson 安裝與核心配置 (三步走)

  1. 安裝:java -jar hudson.war (內建 Winstone 容器),瀏覽 https://localhost:8080。
  2. 全域工具設定:Manage Hudson → Configure System,指定 Ant 安裝路徑、郵件伺服器 (SMTP)、Subversion 認證 (/scm/SubversionSCM/enterCredential 頁面輸入倉庫 URL、建構專用帳號 buildmaster)。
  3. 建立 Job:New Job → Build a free-style software project,名稱 Solar Project。

Job 進階配置詳解

區塊關鍵設定說明
原始碼管理Subversion → Repository URL如 https://scm.acme.com/svn-repo/main/trunks/solar-ci
建構觸發Poll SCM → Schedule: * * * * * (每分鐘)示範用高頻,生產建議 H/5 * * * * (每 5 分)
建構步驟Invoke Ant → Targets: test (含編譯)或 pmd,findbugs 串聯
建構後動作Publish JUnit test result report → solar-ci/target/test-reports/*.xml啟用測試趨勢圖
建構後動作E-mail Notification / RSS失敗通知開發團隊

插件擴展:趨勢視覺化與品質閘門

  1. FindBugs Plugin:安裝後 Job 配置新增 Publish FindBugs analysis results,指定 **/findbugs.xml,設定 閾值 (如優先級 1+2 超過 5 個判定不穩定)。
  2. Violations Plugin:整合 PMD、CheckStyle、FindBugs 統一趨勢,配置 pmd_report.xml 路徑。

安裝插件:Manage Hudson → Manage Plugins → Advanced → Upload .hpi → 重啟 Hudson。

實戰驗證:從綠燈到趨勢圖

  1. 首次建構:Hudron 偵測 SCM 變更 → 執行 ant test → JUnit 2 測試通過 → 趨勢圖顯示 2 Tests。
  2. 新增 2 測試 → 提交 → Hudson 觸發建構 → 趨勢圖變 4 Tests (藍色上升曲線)。
  3. 引入違規代碼 → PMD/FindBugs 報警 → Violations/FindBugs 趨勢圖顯示紅色峰值。
  4. 修復違規 → 趨勢圖下降 → 建構狀態回綠 → 專案健康度圖示轉為「陽光燦爛」。

關鍵指標儀表板:Hudson 首頁專案列表的「太陽/雲朵」圖示即時反映建構穩定度與測試穩定度。

結語

CI 不是裝個 Hudson 就算數,核心在於 可重複的建構腳本、自動化的品質檢查、可視化的趨勢回饋。本教學提供的 Ant 模組化範本、Hudson 配置清單、插件整合方案,可直接套用至專案。記住:建構腳本的可靠度決定 CI 的成敗——任何環境依賴、硬編碼路徑、手工步驟都是 CI 的大敵。立即建立你的品質防線,讓缺陷無處遁形。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved