標籤:
這些天做了一個基於 VSTS 的 Xamarin.Android的持續整合,這裡分享下
Build Agent 環境需求
DotNetFramework
msbuild
visualstudio
AndroidSDK
JDK
Xamarin.Android
Build的部分分為以下步驟:
1. 還原NuGet包
a. 這步之所以存在,原因為我使用了Xamarin.Android進行編譯,而沒有直接對解決方案使用MSBUILD進行編譯,所以需要單獨還原一下NuGet包
b. 解決方案路徑填寫 **\*.sln 即可
2. 替換版本號碼
a. Xamarin.Android的版本號碼與AndroidManifest.xml中的versionName與versionCode有關,我在這裡使用Powershell將版本號碼替換成了新的
b. 此指令碼傳遞參數為當前原始碼路徑,$(Build.SourcesDirectory)
c. 指令碼代碼:
param(
[string]$path ) if([String]::IsNullOrEmpty($path)){ $path= $($MyInvocation.MyCommand.Definition.Replace("build\changeVersion.ps1" ,"")) } write $path $pattern=‘android:versionName="[^"]+"‘ $version=[String]::Format(‘android:versionName="{0}.{1}"‘,[DateTime]::Now.Year-2013,[DateTime]::Now.ToString("M.d.H")) $filePath = [System.IO.Path]::Combine($path,"source\AndroidAppProject\Properties") write $filePath ls $filePath *.xml | %{sc -Path $_.FullName -Value $($(gc $_.FullName) -replace $pattern,$version) }
3. 編譯Android程式
a. 使用TSTS內建的Xamarin.Android進行編譯
b. 輸出目錄我設定在了$(Agent.BuildDirectory)\bin\$(BuildConfiguration)
c. 配置使用使用者入隊時的配置$(BuildConfiguration)
4. 擷取編譯Andorid的AndroidManifest資料,例如 packagename/label/versionName等
a. 這個是我自己寫的一個VSTS擴充,用於擷取一些應用的基本資料,並儲存在對應的變數中,以備後續步驟使用(產生ReleaseNote時)
b. https://github.com/chsword/zou-vsts-tasks
5. 對編譯好的Android apk進行簽名
a. 使用 VSTS內建的Android簽名 功能進行簽名
b. 需要勾選 為APK簽名,並填入Keystore密碼、Keystore別名,密鑰密碼
c. Jarsigner 參數: -verbose -sigalg MD5withRSA -digestalg SHA1
d. 勾選Zipalign
6. 刪除多餘的檔案
a. 因為編譯時間 DLL 也會被複製過來,所以需要刪除下多餘的檔案,只留APK
7. 產生 ReleaseNotes
a. 使用的是 rfennell 的產生ReleaseNote的VSTS擴充 https://github.com/rfennell/vNextBuild/tree/master/Extensions/GenerateReleaseNotes
b. 我這裡將 ReleaseNotes,產生了一個 MarkDown :ReleaseNotes.md,以備發布時使用
8. 產生預發布指令碼
a. 我提前寫了一個預發布Powershell指令碼用於將APK發布到Bugly,主要是調用 CURL,這裡就不詳述了
這樣,就可以進行 手動或自動整合的操作
小技巧:
關于敏感資料,一些敏感性資料,比如簽名時的密碼、其實可以在 組建定義 的 變數 中進行定義,並設定為加密變數 ,這樣在傳輸或編輯時,都將無法查看此變數
引用:
Vsts build 中可以使用的變數:
https://www.visualstudio.com/zh-cn/docs/build/define/variables
Bugly api文檔
https://bugly.qq.com/docs/user-guide/api-beta/?v=20160824161206
擷取 Xamarin.Android AndroidManifest 資訊
https://github.com/chsword/zou-vsts-tasks
Xamarin.Android VSTS 持續整合