在我工作的項目中有這樣一個需求。當通過自動部署腳本将目前一個CI建構的WAR包部署到指定伺服器後,需要驗證該WAR包是否被部署成功。
MANIFEST.MF檔案是Java平台下的Jar包或者war包中都普遍存在的一個檔案。這個檔案通常被放置在META-INF檔案夾下,名稱通常為MANIFEST.MF。它其實相當于一個properties檔案,裡面都是一些鍵值對,特殊之處是每個jar包或者war包至多隻能有一個MANIFEST.MF檔案。
是以我們可以在項目的pom.xml加入以下的plugin來設定一些build資訊到MANIFEST.MF檔案中。
然後,建立一個頁面來顯示這些build資訊,以便能随時檢視目前部署在伺服器上的war包的build number是多少,是由誰建構的,建構時間等資訊。第二個job的部署腳本也可以通過這個頁面得到build number,以此來判别部署的是否是想要的版本。
這就牽扯到對MANIFEST.MF檔案的讀取了。有一個現成的庫用于讀取jar包或者war包中的MANIFEST.MF檔案資訊。
在項目的pom.xml檔案中加入對這個庫的依賴。
對于war包而言,需要通過SevletContext來擷取目前的MANIFEST.MF檔案。首先需要建立一個繼承自<code>ServletContextListener</code>接口的類來将ServletContext設定給Manifests對象。
然後需要在web.xml配置檔案中将這個Listener加入到Listener清單中。
這樣就可以在Controller裡直接使用Manifests對象來擷取MANIFEST.MF檔案記錄的各種值了。
再建立一個jsp頁面用于顯示這些值即可。
最後,部署腳本擷取該頁面的内容,判斷頁面内容中的build number是否為期望部署的build number。
這隻是判斷部署的war包是不是期望的war包。如果想要驗證其是完全可以工作的,就需要部署腳本調用smoke test來進行功能性測試了。這個留到下次再講。