在MSDN站點最近的一篇文章中,Daniel Meixler探討了一個針對物聯網(Internet of Things,IoT)應用的完整DevOps生命周期,用到了微軟的框架和組件。這個理念稍作改動就可以泛化應用到其他IoT平臺上。
一般來講,DevOps在Web應用中最為流行,但它并不是與特定技術或特定類型的應用綁定的。這篇文章介紹了如何為冰箱控制應用創建端到端的DevOps生命周期,證明了這種理念。對于完整的自動化CI/CD鏈,人們會予以特別關注。一旦特定應用所面臨的挑戰已明確,那么這些挑戰就可以使用所選擇的技術棧來解決。有一些概念是通用的,能夠以技術無關的形式進行重用。
示例應用仿真了一個冰箱控制系統,運行在Raspberry PI上。針對這種IoT應用的開發管道(pipeline)會面臨著各種挑戰。這種管道需要涵蓋每次check-in之后的自動構建、自動化UI測試、部署到各種環境(包括生產)并收集遙測數據。通常,UI測試是比較困難的,在設備上的自動化測試則會更加困難。在這種環境下,DevOps所面臨的挑戰還包括可審核性與設備兼容性,但是這些問題在本文中并沒有解決。
針對問題中所提及的冰箱應用,部署需要發布到測試設備(QA)和客戶的設備(生產環境)上。后者并不容易實現,因為通常沒有到這些設備的物理連接。在這種情況下,設備的數量會非常龐大,并且位于客戶的專屬環境中,跨越非常廣大的地理區域。最后一個需求,也就是遙測,為IoT設備帶來了另外一個挑戰,因為這些操作通常沒有太多的人工干預,用戶沒有辦法反饋應用運行情況的信息。收集手動反饋并不是可行的方案。
這里做出的技術選擇會優化管道,而且沒有太多的定制。IoT平臺是Windows 10 IoT Core,應用是一個Windows Universal App(UWP)。編排平臺是Visual Studio Team Services(VSTS)。VSTS有一些特性致力于簡化DevOps流程。按照微軟的技術棧,這里選擇了Azure IoT Hub作為管理平臺。它用來管理和配置IoT應用。Azure IoT Hub支持多種語言,這個應用用到了.NET和node.js。HockeyApp是微軟在幾年前收購的,它用來從設備上收集使用和錯誤分析數據。
圖片來源于https://blogs.msdn.microsoft.com/dmx/2017/01/26/devops-for-iot-part-1/
當這個管道執行時,會生成新的應用,發布流程會通知Azure IoT Hub。Hub的責任是確保新版本能夠在所有已注冊的IoT設備上下載并安裝。對于在線的設備來說,這可能會立即運行,而對于離線的設備,則可能會有一個延遲模式。
查看英文原文:Setting up a DevOps Pipeline for an IoT Application