Visual Studio Code 使用 Azure Pipelines
2018 年 9 月 12 日 João Moreno, @joaomoreno
作為 Visual Studio Code 團隊的開發人員,我的職責之一是維護和改進我們的構建和持續整合 (CI) 基礎設施。鑑於 Azure Pipelines 最新的功能釋出,Visual Studio Code 團隊已大幅改變了我們利用微軟技術的方式,以提供一個更好的協作平臺,服務於我們的開發人員和使用者。在這篇博文中,我將向您介紹一些 Visual Studio Code 的歷史,重點關注我們的 CI 流程和工具以及它們是如何隨著時間變化的。
Visual Studio Code 工程
像任何其他開源專案一樣,我們需要擁有正確的工具和能力來接收、分類和處理儘可能多的程式碼貢獻。在開發者工具領域尤其如此,因為使用者本身就是開發者:他們是一個充滿熱情、勤奮且非常高效的群體。截至這篇博文釋出時,我們有 148 個未解決的 PR 以及 3,482 個已關閉的 PR,考慮到專案迄今為止 3 年的壽命,平均每天約有 3 個 PR。我們必須為處理如此規模的貢獻做好充分準備,這不僅能保持專案開發的健康發展,還能為其他開源專案如何在此規模下運作提供一個範例。我們實現這一目標的部分方式是透過 將 PR 體驗帶入編輯器 來簡化我們的工作流程,但 CI 是處理大規模貢獻的另一個重要組成部分。
直到最近,我們還依賴於開源社群對公共持續整合的預設選擇:Travis CI 用於我們的 Linux 和 macOS 構建,以及 AppVeyor 用於 Windows。此外,我們使用 Coveralls 提供詳細的測試覆蓋率報告。這些服務為我們公共倉庫中的 PR 和程式碼分支提供質量報告,因為它們自動化了 編譯,執行 程式碼規範檢查 並 執行多個測試 套件,所有這些對於在擁有大量傳入貢獻的分散式團隊中保持質量至關重要。這種服務組合需要理解和維護至少 3 個不同的系統,每個系統都有自己特殊的檔案格式、語法、怪癖、限制等。
採用 Azure Pipelines
今年早些時候,Azure Pipelines(當時的 Visual Studio Team Services)團隊聯絡我們,嘗試一些新的東西。這項宣佈標誌著我們轉向更精簡的持續整合解決方案。我們的構建現在同時在所有平臺上執行,檢視詳情
為了實現這一轉變,需要做很多很酷的事情。讓我們分解一下:
- Azure Pipelines 對公共專案的支援 使我們能夠執行一個 面向公眾的 Visual Studio Code 專案,其中運行了我們所有的持續整合構建;
- Azure Pipelines 中的 構建代理 長期以來一直支援 Windows、macOS 和 Linux 平臺矩陣;
- 在 Azure Pipelines 中執行 macOS、Linux 和 Windows 的 Microsoft 託管代理 提供了一套出色的軟體棧來構建專案,而無需擔心構建機器的維護;
- YAML CI 允許建立 YAML 定義,這些定義與專案源緊密結合(Visual Studio Code 為此提供了 出色的擴充套件)。
將所有這些整合在一起,我們終於能夠專注於一個 CI 解決方案。Visual Studio Code 在 Azure Pipelines 上的構建 在一次構建中執行我們的編譯、衛生檢查和測試套件,自動將構建分發到不同的平臺。由於我們使用的是 Microsoft 託管的構建代理,我們無需擔心維護這些機器。
第三方整合
Azure Pipelines 還提供了 GitHub 整合,它在我們的 GitHub 專案頁面,特別是在拉取請求中,提供了構建結果指示器。
我們還構建了一個聊天機器人,它連線到 Azure Pipeline 的 REST API,並在構建中斷時向我們的內部聊天提供通知。
未來展望
我的下一個任務將是利用 程式碼覆蓋率報告,以獲得比以前的工具組合更好的端到端 CI 流程。
轉向 Azure Pipelines 對我們來說是一個巨大的成功。由於構建不再分散各地,現在更容易推斷整體程式碼質量。我們還整合了 構建定義檔案 的數量和格式。我們對這一變化感到非常高興,並對 Azure Pipelines 的未來充滿期待。
如果您想了解更多關於公共專案和 Azure Pipelines 的資訊,請檢視他們的 部落格文章。
您想嘗試 Visual Studio Code 嗎?立即下載 適用於您選擇的平臺。如果您像我們一樣,總是想執行最新最好的版本,那麼請 獲取我們每日構建的 Insider 版本。您只是想聯絡或保持聯絡嗎?在 Twitter 上關注我們 @code。
代表 VS Code 團隊:祝您編碼愉快!
João Moreno, @joaomoreno