使用 Visual Studio Team Services (VSTS) 自動建置簽入 GitHub 的 Android 專案
Visual Studio Team Services (VSTS。原名:Visual Studio Online)是提供給開發人員或團隊協助開發工作的線上服務,它提供了像是專案管理、版本控制、自動建置、自動測試、部署發行管理等功能,並且支援各種程式語言、開發平台或是 IDE 工具等,如果是五人以下的團隊可以免費開始使用。(詳細功能與價格可參考這頁說明)
目標
這篇文章要完成的任務,是以 Android 專案為例子,並且使用 GitHub 為版本控制的工具(當然也可以用 VSTS 作版本控制,也支援 Git),而主角 VSTS 則是用來根據設定來自動執行建置專案的工作,自動產生建置好的 apk 檔案以便後續的發行部署。
操作步驟
Android 專案
本文中的例子,是以 Android Studio 所產生的專案結構為例子,這裡不必做任何特殊的設定或修改,就像一般一樣使用它來建立專案即可,而 VSTS 內建的 Android 建置範本是使用 gradle 腳本,所以如果關於建置工作的設定,可以修改 build.gradle 檔案的內容即可。
目前在 VSTS 上的 Android 建置環境,JDK 的部份支援到 8,而 Android 建置工具支援到 API Level 22,並且還不支援 Android Support Repository 以及 Android Support Library,如果需要這些函式庫,可參考另一篇 [使用專屬建置伺服器](coming soon) 一文。
本文的專案設定是 compilerSdkVersion: 19, buildToolsVersion: "19.1.0", minSdkVersion: 19, targetSdkVersion: 19,沒有使用 Android Support Repository 及 Android Support Library。
將專案原始碼發佈到 GitHub 也可以是預設的 Android Studio 所產生的專案架構,像是這樣:
設定 VSTS 的建置規則
登入 VSTS 後,首先建立一個專案,因為這裡沒有特別提到專案管理以及版本控制的部份,所以您可以依據您的喜好設定。
建立好專案後,在專案頁面中切換至 BUILD 的頁面:
在 BUILD 頁面中就要開始設定建置的腳本,按下建立新腳本的按鈕:
然後選擇 Empty 範本開始建置:
選擇 Empty 範本後按 Next 進到下一步基本設定,這裡因為我們是以 GitHub 為例,所以 Repository type 的部份就選擇 GitHub;agent queue 的部份就選擇 Hosted 來使用 VSTS 的建置環境;而下方的 Continuous integration 勾選的話,每次把程式碼簽入 GitHub 時都會驅動建置的工作,若不勾選,可以之後再設定要手動建置或是定期建置。設定完成後,就按下 Create 完成建立。
產生建置定義後,第一件事是先把 Repository 設定好(一開始會看到它呈現紅色驚歎號),首先要在 Connection 欄位的右側按下 Manage 來設定 GitHub 的帳號密碼,以讓 VSTS 的建置程式能夠連接到您的 GitHub 帳號。
在管理服務的頁面中,選擇新增一個 GitHub 的 Service Endpoint:
接著,按下對話盒中的 Authorize 按鈕,這時會跳出一個視窗(注意是否被瀏覽器擋掉)到您 GitHub 的帳號授權存取,完成授權後,為這個連線取一個名字,按下 OK 按鈕就可以完成設定。
設定完成後,回到建置定義中的 Repository 頁面完成設定,這裡就選擇要連結 GitHub 上的 repository、要拿哪個分支來建置、還有是否每次都是 clean build 等等,最後按下上方的 Save 按鈕儲存,同時也會讓您修改這個建置定義的名稱。
Repository 設定完成後,回到 Build 頁面,我們要在這裡加入建置的工作,按下 Add build step... 按鈕選擇工作。
VSTS 的建置工作很自由,您可以挑選許多工作串接起來,這裡我們可以先選擇 Android Build 的工作就可以了。
在建置定義中加入一個 Android Build 的工作後,最簡單的設定就是把 Gradle Wrapper 設定好,如果是使用 VSTS 的建置環境而不是自建的機器,就要選擇 gradlew.bat 由它來驅動 gradle 的建置命令。其它的欄位可以先不特別設定,而設定完成一樣要按下工具列的 Save 按鈕儲存設定。
設定的工作到此就完成了(最基本的建置),如果你稍早設定了每次簽入程式碼就執行建置的話,可以試著去 commit 一個新的版本來驅動,或是按下工具列上的 Queue build... 按鈕來手動執行,按下後便會開始排程使用 VSTS 的建置環境,按照設定的建置工作逐一完成。
當建置開始執行後,您會看到一個 Console 顯示這些建置工作正在做的事,或是各種印出來的訊息,可以幫助您檢視建置的工作是否順利進行。在這個例子中,它就會先到設定的 repository 把程式碼抓回來,然後開始執行 gradlew.bat build 的指令(依據之前的設定)來進行建置。
如果您看到 BUILD SUCCEED 而 Console 中也沒有什麼錯誤訊息的話,恭喜,自動建置的設定已經能正常運作了!
啟動建置之後
前一步只是將自動建置的機制做完,那建置完之後的 apk 要如何取得呢?其實按照預設的 gradle 腳本,以及 Android Build 的建置工作,建置完成的 apk 檔會放在 app/build/outputs/apk/app-debug.apk 這個路徑下,所以你可以再選擇一個建置工作接在 Android Build 的工作之後,看是要用什麼方式傳送到發佈的平台,還是結合其它的工作(例如簽署或是測試等等),這裡示範的是將建置好的 APK 檔案傳到 Azure 的 Blob 儲存體中。
在建置工作中加入一個新的工作:
然後設定要上傳的檔案,如前面所說,Source 的欄位就要填入 app/build/outputs/apk/app-debug.apk;剩下就是設定 Azure 帳號,以及上傳到哪個 Azure Blob 儲存體的帳號,以及存放的容器及路徑。
設定完成後,當建置工作啟動時,就會先完成 Android Build 然後再進行 Azure File Copy 的工作。
結果
透過這樣的設定,開發 Android 專案時僅需專注在應用程式的開發,每次當程式碼簽入到 GitHub(或是其它的版本控制系統),就會自動觸發這一連串的自動工作,對於快速交付的需求或是任務上,將可以盡量減少出錯,並且利用自動化來加速整個工作的進行。