微軟完全重寫了Team Foundation Server和Visual Studio Online的構(gòu)建服務(wù)器,新工具不再使用大量基于XAML的Windows工作流文件作為構(gòu)建定義。
這次重寫主要解決以下問題:
為了解決這些問題,微軟的新構(gòu)建服務(wù)器遵循了這些關(guān)鍵原則:
Visual Studio Online中的新特性
可以直接在瀏覽器中創(chuàng)建并修改構(gòu)建定義,從此不需再為調(diào)整構(gòu)建文件而打開沉重的Visual Studio。
構(gòu)建定義經(jīng)常需要訪問不想告知他人的機(jī)密內(nèi)容,例如產(chǎn)品密鑰、安全token,現(xiàn)在你可以在構(gòu)建定義中使用加密變量保護(hù)這些機(jī)密。
構(gòu)建定義不再被直接定義為一個分支。你創(chuàng)建定義后,可以使用構(gòu)建定義標(biāo)記將被構(gòu)建的分支,每一個分支可以擁有它們自己的觸發(fā)器(CI,daily等)。
當(dāng)使用諸如git-flow的工作流時,最終你往往會創(chuàng)建一堆特性分支。在這個新模型下,你可以在構(gòu)建定義中使用通配符。舉個例子,你可以定義:任一匹配“feature-*”的分支將自動被編譯并運行測試,而“qa-*”分支只進(jìn)行每日構(gòu)建。
構(gòu)建工具可以直接運行PowerShell腳本。這對Azure來說尤其重要,Azure的部署大部分由PS文件來處理。構(gòu)建過程能夠檢查你的Azure訂閱賬號,確保部署程序運行在正確的上下文中就變得更容易了。
一旦部署了一個網(wǎng)站,構(gòu)建自動化可以啟動一個“快速性能測試”,亦即基于Visual Studio/TFS中的負(fù)載測試功能,運行一個初步的冒煙測試來確保部署成功。
跨平臺和測試
除了在OS X上構(gòu)建之外,現(xiàn)在可以在OS X上的構(gòu)建自動化中集成測試程序,生成一個JUnit格式的測試結(jié)果,繼而被導(dǎo)回到構(gòu)建服務(wù)器中并顯示。
構(gòu)建自動化也支持Xamarin測試云,你可以選擇一些測試細(xì)節(jié),例如:從Visual Studio Online直接選擇你感興趣的設(shè)備/操作系統(tǒng)。
VSO支持多種單元測試框架。
跨平臺構(gòu)建代理基于Node.js和xplat。
可擴(kuò)展性
以環(huán)境變量的方式暴露關(guān)鍵信息,例如:構(gòu)建版本號。任何腳本語言都可以讀取環(huán)境變量獲得這些信息。
當(dāng)新版本構(gòu)建工具發(fā)布的時候,構(gòu)建代理可以自動升級。
開源所有開箱即用的任務(wù),尚未決定是否允許第三方為OOB貢獻(xiàn)代碼。
在Windows平臺用PowerShell編寫任務(wù),在其它平臺上用xplat和JavaScript編寫。
體系結(jié)構(gòu)
新的構(gòu)建服務(wù)器依然支持基于XAML的構(gòu)建定義。
構(gòu)建代理移除了一大敗筆——單一的物理控制器。
代理被分為許多池,每個池被配以集合并受到池級保護(hù)。消除了管理個別構(gòu)建代理的必要性。
安全性
目前的構(gòu)建代理運行在一個共享進(jìn)程中。這意味著一旦構(gòu)建失敗將影響到整個構(gòu)建代理,甚至一個打開的文件句柄都會讓整個過程終止。
在新構(gòu)建代理模型中,每個構(gòu)建運行在自己的進(jìn)程下。當(dāng)一個構(gòu)建完成時,進(jìn)程被完全銷毀,并創(chuàng)建一個新的進(jìn)程來執(zhí)行下一個構(gòu)建。
在大多數(shù)構(gòu)建系統(tǒng)中都有一個相對未知的安全黑洞——“單元測試后門”。開發(fā)者可以通過寫單元測試來捕獲敏感信息,然后用于獲取嚴(yán)格保密的信息。為了幫助開發(fā)者減輕這方面的風(fēng)險,構(gòu)建代理綁定了一個時間限制token,一旦構(gòu)建完成立即失效。
想了解更多有關(guān)構(gòu)建自動化新特性的信息,歡迎查看Channel 9的現(xiàn)場演講《Team Foundation Server和Visual Sdudio Online中的新一代構(gòu)建自動化》。
查看英文原文:New Build Automation Features in Visual Studio Online