November 30, 2013

與Jenkins共舞 - 封存建置成品

在Jenkins成功建置專案後,通常我們會將編譯後的應用程式或軟體封存(archive)起來,作法與備份類似,如此可以方便未來回顧每個建置當時所產出的成品(artifact)為何。例如,每個成功建置的軟體,會有自己的版本編號,將每個不同版本編號的軟體封存起來,除了可以了解目前的建置版本,若釋出的應用程式有defect,也可以取出相對應的版本進行測試。


在Jenkins中若要設定封存功能,可以在Build Job下的Post-build Actions中加入Archive the artifacts


Files to archive中可填入某個路徑或資料夾,如下圖表示要將bin底下所有檔案封存起來。要注意的是,這裡的路徑是相對於Jenkins中workspace的路徑。


設定完成並建置專案,可以在建置成功的結果頁面中看到Build Artifacts樹狀選單,將選單展開即可以看到建置成品。


在檔案系統中也可以看到封存的成品。


如果建置成品是特定副檔名的封裝檔,例如在建置時已經將應用程式封裝成MSI檔,在設定Files to archive路徑時,也可輸入如下圖路徑


Build Artifacts樹狀選單中就可以看到被封存的封裝檔。


到目前為止設定上都不困難,然而Jenkins內建的封存功能,預設是將建置成品各別放在每個建置結果的資料夾下,如C:\Jenkins\jobs\[Job Name]\builds\181\archive\,如此便無法集中管理封存檔。若要集中管理,可以安裝ArtifactDeployer Plugin,也是我目前封存建置成品使用的plugin。設定上不會太困難,有興趣的朋友可以試試。



November 19, 2013

WiX中加入.NET Framework版本檢查 (2)

WiX中加入.NET Framework版本檢查一文中介紹如何在WiX中加入對.NET Framework 4.0的檢查。如果安裝環境沒有.NET Framework 4.0的話,安裝過程中會跳出警告視窗,在使用者按下確定按鈕後即會停止整個安裝過程。


接下來如果使用者想要安裝.NET Framework 4.0,則必須自行瀏覽官方網站進行下載。這時會想,如果能自動開啟官方網站的話對於使用者來說不也挺方便的嗎?透過WiX提供的WixShellExecCustomAction,可在安裝過程中開啟指定網頁,如下
<Property Id="WixShellExecTarget" Value="http://www.microsoft.com/zh-tw/download/details.aspx?id=17718" />
<CustomAction Id="LaunchBrowser" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
<InstallUISequence>
    <Custom Action="LaunchBrowser" Before="LaunchConditions">
        <![CDATA[NOT NETFRAMEWORK40FULL]]>
    </Custom>
</InstallUISequence>
<Condition Message="請先安裝Microsoft .NET Framework 4.0再安裝此軟體">
    <![CDATA[NETFRAMEWORK40FULL]]>
</Condition>

屬性WixShellExecTarget裡的Value即為要開啟的網址。InstallUISequence裡則設定了一個CustomAction檢查安裝過程中若系統環境沒有.NET Framework 4.0,則會開啟下載.NET Framework 4.0的官方網站,最後根據Condition發出警告視窗。Condition裡的條件若不成立的話,Windows Installer將會立刻結束安裝。這裡有一點要特別注意的是,CustomAction裡必須是Before="LaunchConditions"而不是After="LaunchConditions"。若設定為After="LaunchConditions",則會因為Condition執行完因條件不成立而停止安裝,網頁將會無法開啟。

參考資料

November 4, 2013

書評 - Clean Code: A Handbook of Agile Software Craftsmanship

圖片來源:天瓏網路書店
在書架上躺了一年多,這兩個月終於花些時間把它看完了。本書為Uncle Bob經典系列作之一,台灣在今年也有中文譯本上市,書名為無瑕的程式碼-敏捷軟體開發技巧守則。這年頭願意翻譯中高階書籍,譯者可謂佛心。本書作者雖掛上Uncle Bob的名字,但部份章節是由其它作者和Uncle Bob的團隊成員所撰寫,書中部份章節及程式碼範例也大多針對Java所寫。針對Java所寫的章節如果興趣不大,可快速瀏覽或跳過,對於閱讀本書其它章節影響不大。本書共有17個章節,四百多頁。

所謂的Clean Code,簡單地說其實就是易讀、可維護、可測試且持續重整的程式碼。

聽起來很簡單做起來卻是不容易。要做到易讀,程式碼的命名就要講究。通常我們寫程式仍以英文為主,對於英文非母語的人來說,英文命名是件頭痛的事,畢竟可使用的字彙有限。事實上,對於英文為母語的人來說也是件頭痛的事。測試?功能都寫不完了怎麼寫測試程式,更遑論重整程式碼了。

要做到Clean Code,牽涉到不只是開發人員的專業度,還有其它許多因素,如時程或政治因素。雖說如此,不代表可以不要做或不能做,所以書中提出的一些看法及作法來達到Clean Code,例如程式碼的命名、註解的寫法及程式碼的排版風格等仍是具有參考性。

身為一個專業的開發人員,寫出Clean Code應該是其畢生所追求的目標之一,至少我是這樣告訴自己。把程式碼寫好,不只是為了日後的維護人員(可能是同事,也可能是自己),也是為了提昇整個團隊產出的品質,降低維護所需的成本。雖然有時出於無奈無法達成,但至少盡力做到便是。對於資深開發人員來說,本書可能有一半的內容已經了解或平常已在實踐,但對於初階開發人員來說本書是相當值得參考。閱讀本書前,如果已經看過以下幾本書,讀起來會更為輕鬆,也較為清楚書中所指意思為何。

Design Patterns: Elements of Reusable Object-Oriented Software
Refactoring: Improving the Design of Existing Code
Agile Software Development, Principles, Patterns, and Practices

以上書籍皆有中譯本。