適用於: IoT Edge 1.4
這很重要
IoT Edge 1.5 LTS 和 IoT Edge 1.4 為受支持的版本。 如果您是舊版,請參閱更新 IoT Edge。
Azure Pipelines 包含內建的 Azure IoT Edge 工作,可協助您使用 Azure IoT Edge 應用程式採用 DevOps。 本文示範如何使用 Azure Pipelines 的持續整合和持續部署功能,使用傳統編輯器快速且有效率地建置、測試及部署應用程式至 Azure IoT Edge。 或者,您可以使用 YAML。
在本文中,您會了解如何使用 Azure Pipelines 的內建 Azure IoT Edge 工作,來為您的 IoT Edge 解決方案建立組建並發佈管線。 新增至管線的每個 Azure IoT Edge 工作都會實作下列四個動作的其中一個:
行動 | 說明 |
---|---|
建置模組影像檔 | 取得您的 IoT Edge 解決方案程式碼,並建置容器映像。 |
推送模組映像 | 將模組映像推送至您指定的容器登錄。 |
產生部署資訊清單 | 取得 deployment.template.json 檔案和變數,然後產生最終的 IoT Edge 部署資訊清單檔。 |
部署到 IoT Edge 裝置 | 針對一或多個 IoT Edge 裝置建立 IoT Edge 部署。 |
除非另有指定,否則本文中的程序不會探索所有可透過工作參數使用的功能。 如需詳細資訊,請參閱下列資源:
先決條件
Azure Repos 存放庫。 如果您沒有存放庫,可以在專案中建立新的 Git 存放庫 \(英文\)。 針對本文,我們建立了名為 IoTEdgeRepo 的存放庫。
已提交並推送至您存放庫的 IoT Edge 解決方案。 如果您想要建立新的範例解決方案以測試本文,請遵循 使用 Visual Studio Code 開發 Azure IoT Edge 模組 中的步驟。 對於本文,我們已在名為 IoTEdgeSolution 的存放庫中建立了一個解決方案,其具有名為 filtermodule 的模組程式碼。
針對本文,您只需要在 Visual Studio Code 或 Visual Studio 中由 IoT Edge 範本所建立的解決方案資料夾。 在進行之前,您並不需要針對此程式碼進行建置、推送、部署或偵錯。 您將在 Azure Pipelines 中設定那些程序。
知道您的解決方案中 deployment.template.json 檔案的路徑,這會在幾個步驟中使用。 如果您不熟悉部署範本的角色,請參閱了解如何部署模組並建立路由。
小提示
若您是建立新的解決方案,請先在本機複製您的存放庫。 然後,當您建立解決方案時,您可以選擇直接在存放庫資料夾中建立它。 您可以輕鬆地從那裡提交和推送新檔案。
您可以推送模組映像檔案的容器映像庫。 您可以使用 Azure Container Registry 或協力廠商登錄。
至少具有兩個 IoT Edge 裝置的作用中 Azure IoT 中樞,以用來測試個別的測試和生產部署階段。 您可以遵循快速入門文章來在 Linux 或 Windows 上建立 IoT Edge 裝置
建立建置管線以進行持續整合
在本節中,您將建立新的建置流程。 當您簽入 IoT Edge 解決方案的變更時,您會設定管線以自動執行並發佈組建記錄。
登入您的 Azure DevOps 組織 (
https://dev.azure.com/{your organization}
),並開啟包含您的 IoT Edge 解決方案存放庫的專案。從專案的左窗格功能表中,選取 [管線]。 選擇頁面中央的 建立管線。 或者,如果您已經有組建管線,請選取右上方的 [新增管線] 按鈕。
在 [ 程序代碼在哪裡?] 頁面底部,選取 [使用傳統編輯器]。 如果您想要使用 YAML 來建立專案的組建管線,請參閱 YAML 指南。
請遵循提示來建立管線。
提供新組建管線的來源資訊。 選取 [Azure Repos Git ] 作為來源,然後選取 IoT Edge 解決方案程式碼所在的專案、存放庫和分支。 然後選取 [繼續]。
選取 [空白作業 ],而不是範本。
建立管線之後,您就會進入管線編輯器。 在這裡,您可以變更管線的名稱、代理程式集區和代理程式規格。
您可以選取由 Microsoft 裝載的集區,或您管理的自行裝載的集區。
在管線描述中,根據您的目標平台選擇正確的代理設定:
如果您想要在適用於Linux容器的平臺 amd64 中建置模組,請選擇 ubuntu-18.04
如果您想要在適用於 Windows 1809 容器的平臺 amd64 中建置模組,您必須 在 Windows 上設定自我裝載代理程式。
如果您想要在適用於 Linux 容器的平臺 arm32v7 或 arm64 中建置模組,您必須在 Linux 上設定自我裝載代理程式。
您的管線已預先配置了一個名為 Agent 作業 1 的工作。 選取加號 (+) 以將四個工作新增至作業: Azure IoT Edge 兩次、 複製檔案 一次,以及 發佈組建成品 一次。 搜尋每個工作,並將滑鼠停留在工作的名稱上,以查看 [ 新增 ] 按鈕。
新增所有四個工作時,您的 Agent 作業看起來會像下列範例所示:
選取第一個 Azure IoT Edge 任務以進行編輯。 此工作會使用您指定的目標平臺,在解決方案中建置所有模組。 使用下列值編輯工作:
參數 說明 顯示名稱 [動作] 欄位變更時,會自動更新顯示名稱。 行動 選取「建立模組映像」。 .template.json 檔案 選取省略號 (...) 並流覽至包含 IoT Edge 解決方案之存放庫中 的deployment.template.json 檔案。 預設平台 根據您的目標 IoT Edge 裝置為模組選取適當的作業系統。 輸出變數 提供參考名稱,以與您 deployment.json 檔案產生的檔案路徑產生關聯,例如 邊緣。 如需此工作和其參數的詳細資訊,請參閱 Azure IoT Edge 工作。
這些組態會使用檔案中
module.json
定義的映像存放庫和標籤來命名和標記模組映像。 建置模組影像 也有助於將變數替換為您在module.json
檔案中定義的確切值。 在 Visual Studio 或 Visual Studio Code 中,您會在檔案中.env
指定實際值。 在 Azure Pipelines 中,您會在 [ 管線變數 ] 索引標籤上設定值。選取管線編輯器選單上的 [ 變數 ] 索引標籤,然後設定名稱和值,如下所示:- ACR_ADDRESS:您的 Azure Container Registry 登入伺服器值。 您可以在 Azure 入口網站的容器登錄概觀頁面上找到登入伺服器值。
如果您的專案中有其他變數,您可以在此索引標籤上指定名稱和值。 建置模組影像 只會辨識格式的
${VARIABLE}
變數。 請確定您在檔案**/module.json
中使用此格式。選擇第二個Azure IoT Edge任務來編輯。 此工作會將所有模組映像推送至您選取的容器登錄。
參數 說明 顯示名稱 [動作] 欄位變更時,會自動更新顯示名稱。 行動 選取 [推送模組映像]。 容器登錄類型 使用預設類型: Azure Container Registry
。Azure 訂用帳戶 選擇您的訂用帳戶。 Azure 容器登錄資料庫 (Azure Container Registry) 選取用來儲存模組映像的容器登錄類型。 根據您選擇的登錄類型,窗體會變更。 如果您選擇 Azure Container Registry,請使用下拉式清單來選取 Azure 訂用帳戶和容器登錄的名稱。 如果您選擇 [一般容器登錄],請選取 [ 新增 ] 以建立登錄服務連線。 .template.json 檔案 選取省略號 (...) 並流覽至包含 IoT Edge 解決方案之存放庫中 的deployment.template.json 檔案。 預設平台 根據您的目標 IoT Edge 裝置為模組選取適當的作業系統。 將登錄認證新增至部署指令清單 指定 true 以將 Docker 映像推送至部署指令清單的登錄認證。 如需此工作和其參數的詳細資訊,請參閱 Azure IoT Edge 工作。
如果您有多個容器登錄來裝載模組映像,您需要複製此工作、選取不同的容器登錄,並使用 [進階設定] 中的 [略過] 模組來略過不是此特定登錄的映像。
選取複製檔案工作來進行編輯。 使用此工作將檔案複製到成品預備目錄。
參數 說明 顯示名稱 使用預設名稱或自定義 源數據夾 要複製之檔案的資料夾。 內容 新增兩行: deployment.template.json
和**/module.json
。 這兩個檔案可作為產生IoT Edge部署指令清單的輸入。目標資料夾 指定變數 $(Build.ArtifactStagingDirectory)
。 請參閱建置變數以了解描述。如需此工作及其參數的詳細資訊,請參閱複製檔案工作。
選取 發佈建置成果 工作以進行編輯。 提供工件的預備目錄路徑給工作,以便將路徑發佈到發佈管線。
參數 說明 顯示名稱 使用預設名稱或自定義。 發佈的路徑 指定變數 $(Build.ArtifactStagingDirectory)
。 若要深入瞭解,請參閱 建置變數 。成品名稱 使用預設名稱: drop 成品發佈位置 使用預設位置: Azure Pipelines 如需這項任務及其參數的詳細資訊,請參閱發佈組建工件任務。
開啟 [ 觸發程式] 索引 卷標,然後核取 [ 啟用持續整合] 方塊。 請確定包含您程式代碼的分支已被納入。
- 從 【儲存和佇列】 下拉式清單中選取 【儲存】。
當您將新程式代碼推送至存放庫時,此管線現在已設定為自動執行。 最後一項任務,發布管線工件,會觸發一個發行管線。 繼續進行下一個部分以建置發佈流程。
建立持續部署的發行管線
在本節中,您會建立一個部署管線,設定為在您的組建管線釋出工件時自動觸發,並在 Azure Pipelines 中顯示部署日誌。
建立新的管線,並新增階段:
在 [管線] 下的 [發行] 索引標籤中,選擇 [+ 新建管線]。 或者,如果您已經有發行管線,請選擇 [+ 新增] 按鈕,然後選取 [+ 新增發行管線]。
當系統提示您選取範本時,選擇以 [空白作業] 開始。
您的新發行管線會以單一階段初始化,其名為階段 1。 將階段 1 重新命名為 dev,並將其視為開發環境的持續部署管線。 持續部署管線通常會有多個階段,包括 開發、預備,以及生產。您可以使用不同的名稱,並根據 DevOps 實務建立更多名稱。 重新命名後,請關閉階段詳細資料視窗。
您也可以選取頂端的 [新增發行管線] 文字,以重新命名發行管線。
將發行版本連結到由建置管線發佈的建置工件。 點擊 新增 在成品區域。
在 [新增成品] 頁面上,選取 [建置] 作為 [來源類型]。 選擇您所建立的專案和建置流程。 如果您希望,您可以將來源別名變更為更具描述性的名稱。 然後,選取 新增。
開啟成品觸發程序,並選取切換以啟用持續部署觸發程序。 現在,每次有新的組建可供使用時,都會建立新版本。
dev 階段已預先設定一個作業及零個工作。 從 [管線] 功能表中,選取 [工作],然後選擇 dev 階段。 選取 [代理程式作業],並將其 [顯示名稱] 變更為 QA。 您可以設定代理程式作業的相關詳細資料,但因為部署工作不會挑平台,所以您可以使用所選代理程式集區中的任何代理程式規格。
在 QA 作業上,選取加號 (+) 以新增兩項工作。 搜尋並將 Azure IoT Edge 新增兩次。
選取第一個 Azure IoT Edge 工作,並為其設定下列值:
參數 說明 顯示名稱 [動作] 欄位變更時,會自動更新顯示名稱。 行動 選取 Generate deployment manifest
。.template.json 檔案 指定路徑: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json
。 發佈的路徑來自於建置流程。預設平台 根據您的目標 IoT Edge 裝置為模組選取適當的作業系統。 輸出路徑 輸入路徑 $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json
。 此路徑是最終的 IoT Edge 部署資訊清單檔。這些設定有助於取代
deployment.template.json
檔案中的模組映像 URL。 產生部署資訊清單也協助將您在deployment.template.json
檔案中所定義的變數替換為確切的值。 在 Visual Studio/Visual Studio Code 中,您會在.env
檔案中指定實際值。 在 Azure Pipelines 中,您會在 [發行管線變數] 索引標籤上設定值。移至 [變數] 索引標籤,然後設定名稱和值,如下所示:- ACR_ADDRESS:您的 Azure Container Registry 登入伺服器值。 您可以在 Azure 入口網站中,從容器登錄的概觀頁面擷取登入伺服器。
- ACR_PASSWORD:您的 Azure Container Registry 密碼。
- ACR_USER:您的 Azure Container Registry 使用者名稱。
如果您的專案中有其他變數,您可以在此索引標籤上指定名稱和值。產生部署資訊清單只能辨識
${VARIABLE}
變體中的變數。 確定在您的*.template.json
檔案中使用這個類別。"registryCredentials": { "<ACR name>": { // Your Azure Container Registry **Registry name** value "username": "${ACR_USER}", "password": "${ACR_PASSWORD}", "address": "${ACR_ADDRESS}" } }
選取第二個 Azure IoT Edge 工作,並為其設定下列值:
參數 說明 顯示名稱 [動作] 欄位變更時,會自動更新顯示名稱。 行動 選取 Deploy to IoT Edge devices
。部署檔案 將路徑放入 $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json
。 此路徑是 IoT Edge 佈署清單檔案。Azure 訂用帳戶 選取包含 IoT 中樞的訂用帳戶。 IoT 中樞名稱 選取您的 IoT 中樞。 選擇單一/多個裝置 選擇要將發行管線部署到一或多個裝置。 如果部署到單一裝置,請輸入 IoT Edge 裝置識別碼。 如果要部署到多個裝置,請指定裝置目標條件。 目標條件會在 IoT 中樞內篩選出符合的一組 IoT Edge 裝置。 如果您想使用裝置標籤作為條件,則需要透過 IoT 中樞裝置雙胞胎來更新對應的裝置標籤。 在進階設定中更新 [IoT Edge 部署識別碼] 和 [IoT Edge 部署優先順序]。 如需為多個裝置建立部署的詳細資訊,請參閱了解 IoT Edge 自動部署。 裝置識別碼或目標條件 視先前的選項而定,指定要部署至多個裝置的裝置識別碼或目標條件。 進階 針對 IoT Edge 部署識別碼,指定 $(System.TeamProject)-$(Release.EnvironmentName)
。 此變數會將專案和發行名稱與您的 IoT Edge 部署識別碼對應。如果您的工作牽涉到使用位於公有雲看不到的私人 Docker Trusted Registry 中的映像,則可以將 SKIP_MODULE_IMAGE_VALIDATION 環境變數設定為
true
,以略過映像驗證。選取 [儲存] 以將變更儲存至新的發行管線。 從功能表中選取 [管線] 索引標籤以返回管線檢視。
備註
Azure DevOps 中的 Azure IoT Edge 工作尚不支援分層部署。
不過,您可以使用 Azure DevOps 中的 Azure CLI 工作 ,將部署建立為分層部署。 針對 Inline Script 值,您可以使用 az iot edge deployment create 命令:
az iot edge deployment create -d {deployment_name} -n {hub_name} --content modules_content.json --layered true
使用組建和發行管線驗證 IoT Edge CI/CD
若要觸發組建作業,您可以推送提交至原始碼庫,或者手動觸發。 在本節中,您會手動觸發 CI/CD 管線以測試它是否有效。 接著驗證部署是否成功。
從左窗格功能表中,選取管線,然後開啟您在本文開頭所建立的建置管線。
您可以選取右上角的 [執行管線] 按鈕來觸發建置管線中的建置作業。
檢查 [執行管線] 設定。 然後,選擇 [執行]。
選取 Agent 任務 1 以查看執行進度。 您可以選取作業來檢閱作業輸出的記錄。
如果建置流程順利完成,將進行 dev 階段的發行。 成功的 dev 發行會建立 IoT Edge 部署來鎖定 IoT Edge 裝置。
按兩下 開發 階段以查看發行記錄。
如果您的管線失敗,請從查看記錄開始。 您可以藉由瀏覽至管線執行摘要並選擇作業和任務來檢視日誌。 如果特定的工作失敗,請檢查該工作的記錄。 如需設定及使用記錄的詳細指示,請參閱檢閱記錄以診斷管線問題。
後續步驟
- 了解單一裝置或大規模的 IoT Edge 部署,掌握 IoT Edge 部署的運作。
- 在大規模部署和監視 IoT Edge 模組中,逐步進行建立、更新或刪除部署的操作步驟。