Cody Blog

Software development

Python generate xUnit report for Jenkins

在日常使用的Test Framework所產出的Test Report並不是標準的 JUnit 格式。所以這使得想要回傳Test Result到Jenkins的時侯,沒辦法把 Test Result 顯示在Jenkins的Build的結果上面。然而產生JUnit report的功能在一般的Test Framework像是nose跟py.test都有,像是nose就有一個plugins是專門在處理這個問題,或者是py.test可以直接使用py.test --junitxml=path來產生。可惜我的工具沒有。所以只好自己弄一個了。在此記錄要如何完成這個任務。

上網 Google了一下有關JUnit XML format到底長怎樣,找到Stackoverflow這篇有討論,基本上可以解決90%的疑問。有關XML的定義可以從.xsd檔中找到,而JUnit的.xsd檔,這邊可以下載。我使用XMLPad來打開,再掛載xsd的schema檔,手動體驗一下 xml 的format,基本上最簡單的的JUnit Report大概是這樣:

:::xml
<testsuites xsi:noNamespaceSchemaLocation="file:///D:/junit-4.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<testsuite name="INSTALLATION RAT">
    <testcase classname="INS_RAT_0001" name="Test Case Title Sample 1" time="0.046">
      <system-out></system-out>
    </testcase>
    <testcase classname="INS_RAT_0002" name="Test Case Title Sample 2" time="4.868">
        <failure message="case ...

Install Jenkins on CentOS 6.3

安裝 JDK

CentOS預設的JAVA版本和Jenkins不相容,所以要改安裝 OpenJDK 。可以用 yum search 檢查應該安裝那一個版本: yum search openjdk 會有 java-1.6.0 跟 java-1.7.0 兩個版本可供安裝,在此我選擇比較新的版本:1.7.0: yum install java-1.7.0-openjdk -y

安裝 Jenkins

sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
sudo yum install jenkins -y

設定 Jenkins

  1. 修改 iptables : 打開 80 Port,編輯/etc/sysconfig/iptables,把下面的rule加到最後一條 iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

  2. 讓 Jenkins 開機自動啟動 chkconfig Jenkins On

  3. 編輯 Jenkins ...

Jenkins 在不同的 Jobs 傳遞參數

需求:想讓 Job B 能拿到 Job A 的 Build Number。

在 Jenkins 中每一個Job都有環境變數,可以存取一些像是當下目錄,Build Number 等資訊。但是如果想要存取別的Job的環境變數就要多做一些事情了。

  1. 安裝 EnvInject plugin

  2. 在 Job A 新增一個 Build Step,記錄 Build Number 到 properties file

    echo "JOBA_BUILD=$BUILD_NUMBER" > build.properties

  3. 在 Job B 的 Configuration 中

Build Environment > Inject environment variables to the build process 設定剛才的 Properties File Path, 例如 /var/lib/jenkins/jobs/JobB/workspace/build.properties

因為 Step 3 的關係,我們在Job執行過程中可以直接使用 $JOBA_BUILD 來拿到 Job A 的變數。