TeamCity : 配置 Build 過程

sparkdev發表於2016-11-27

Build 過程往往是比較複雜的,因此 TeamCtiy 通過 build 步驟的方式讓您可以實現不同的應用場景。您可以在每個 build 步驟中只做一件事情,然後把一系列的 build 步驟組織起來按順序執行來完成 build 過程。先看一下 build 步驟配置的概覽:

每一個 Build 步驟都會對應一個 build runner 在背後完成真正的工作。我們要做的就是構思好 build 的過程,然後通過一系列的 build 步驟去實現它。在 build 的過程中,這些 build 步驟會被一個接一個的順序執行。當然,您可以通過 TeamCity 提供的 UI 方便的排列您的 build 步驟的順序。

Build 步驟的執行策略

TeamCity 會根據前一個 build 步驟的返回狀態和當前的 build 狀態來綜合判斷是否執行下一個 build 步驟。當滿足下面條件時 build 步驟的狀態被確定為失敗:build 步驟的執行過程返回了非零的退出程式碼 並且該 build 的失敗條件配置為起作用。其它情況則認為 build 步驟的狀態為成功。
我們可以在 build 步驟中指定不同的執行策略來告訴 TeamCity 究竟要不要執行下一個 build 步驟:

Only if build status is successful

只有在整個 build 處於成功的狀態時才執行該步驟。
在開始執行該 build 步驟前,build agent 會向 TeamCity Server 請求整個 build 的狀態,如果 build 的狀態已經是失敗,則跳過該步驟的執行。

If all previous steps finished successfully

前面所有 build 步驟必須都是成功的。
這種型別不會向 TeamCity Server 傳送請求,只分析之前的 build 步驟有沒有失敗的。

Even if some of previous steps failed

即便前面的 build 步驟有失敗的也會執行。
不管之前的 build 步驟是否失敗,也不管整個 build 的狀態是否已失敗,都執行該 build 步驟。

Always, even if build stop command was issued

總是執行,即便是收到了停止 build 的命令也要執行該 build 步驟。
即便是使用者在前面的 build 步驟中取消了整個 build 的執行,這個 build 步驟也依然會被執行。但是在這個 build 步驟執行的過程中,如果您取消 build,就可以終止它的執行。

接下來我們會演示如何建立一個命令列型別的 build 步驟。

手動新增 Build 步驟

TeamCity 提供了很智慧的 “Auto-detect build steps” 功能,主要是搜尋 VCS 目錄下的可識別的編譯配置檔案然後自動生成 build 步驟。這種方式比較簡單,我們主要介紹能支援複雜配置的手動配置 build 步驟的方式,所以請選擇 “Add build step”。

Runner type

TeamCity 內建支援幾乎所有的 build 型別:

我們可以選擇自己的專案的 build 型別,當然我們還可以選擇更通用的型別:Command Line。它可以執行我們寫的指令碼,如 windows 中的 bat 指令碼和 linux 中的 shell 指令碼。哈哈,有了執行指令碼的能力還有什麼事情做不了呢!
下面我們就來介紹如何建立一個 Command Line 型別的 build 步驟。請選擇 Command Line 型別的 Runner type。

Step name

 您可以為每一個 build 步驟設定名稱。注意,這不是一個必選項,您可以選擇什麼也不填。

Execute step

請選擇合適的執行策略,我們已經在前面詳細的解釋過了。

Working directory

對於要執行的命令來言,工作目錄是非常重要的。如果設定不正確就會發生找不到檔案的錯誤,所以一定要認真設定。您可以手動輸入相對於 checkout 目錄的路徑,也可以通過右側的工具進行選擇。如果您希望工作目錄就是 checkout 的目錄,那麼就不需要進行設定,留空就可以了。

Custom script

當選擇 Custom script 型別時,我們可以直接在輸入框中寫指令碼命令。這麼做的好處是不用管理指令碼檔案了,因為 TeamCity 會把您寫的指令碼命令打包成指令碼檔案在 build 時執行。

Executable with parameters

如果是一個比較複雜的指令碼,我們還是希望把它寫成一個單獨的指令碼檔案,這樣更好維護管理。此時若是想要向單獨的指令碼檔案傳遞引數又該怎麼辦呢?

選擇 Executable with parameters 型別,可以執行指令碼檔案或者是可執行的二進位制檔案,並且可以傳遞命令列引數。上圖中我們就把 checkout 目錄傳遞給了 test.bat 指令碼檔案。

建立多個步驟

為了完成複雜的編譯過程,往往需要多個步驟按順序的執行。TeamCity 也提供了讓使用者可以重新排序 build 步驟的功能。

上圖為新增了兩個 build 步驟後點選 “Reorder build steps” 按鈕的場景。此時build步驟會被列出,您可以用滑鼠拖拽進行重新排序。完成後點選 “Apply” 按鈕就可以了。

總結

本文並沒有挨個的介紹所有 TeamCity 支援的 build 型別,而是介紹了最通用的指令碼命令執行方式。因為筆者認為只有指令碼方式才能夠處理更為複雜的編譯場景,屬於必須要掌握的最具實用價值的方式!

相關文章