Azure IoT Edge 裝置 (傳統編輯器) 的持續整合和持續部署
適用於: 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
如果您想要在 amd64 平台中建置適用於 Windows 1809 容器的模組,您必須在 Windows 上設定自我裝載的代理程式 \(英文\)。
如果您想要在適用於 Linux 容器的 arm32v7 或 arm64 平台中建置模組,則您必須在 Linux 上設定自我託管的代理程式。
您的管線已預先設定名為代理程式作業 1 的作業。 選取加號 (+) 來將四項工作新增至作業:Azure IoT Edge 兩次、複製檔案一次,以及發佈組建構件一次。 搜尋每一個工作,並將滑鼠停留在工作的名稱上,以查看 [新增] 按鈕。
新增完所有四項工作後,您的代理程式作業看起來像下面的範例:
選取第一個 [Azure IoT Edge] 工作來編輯它。 此工作會使用您所指定的目標平台來建置解決方案中的所有模組。 使用下列值來編輯工作:
參數 描述 Display name [動作] 欄位變更時,會自動更新顯示名稱。 動作 選取 [建置模組映像]。 .template.json 檔案 選取省略符號 (...) 並瀏覽至存放庫中的 deployment.template.json 檔案,其包含您的 IoT Edge 解決方案。 預設平台 根據您的目標 IoT Edge 裝置為模組選取適當的作業系統。 輸出變數 提供一個參考名稱,以與您的 deployment.json 檔案在其中產生的檔案路徑產生關聯,例如 edge。 如需此工作及其參數的詳細資訊,請參閱 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] 工作來編輯它。 此工作會將所有模組映像推送到您選取的容器登錄。
參數 描述 Display name [動作] 欄位變更時,會自動更新顯示名稱。 動作 選取 [推送模組映像]。 容器登錄類型 使用預設類型: Azure Container Registry
。Azure 訂用帳戶 選擇您的訂用帳戶。 Azure Container Registry 選取您用來儲存模組映像的容器登錄類型。 表單會根據您所選擇的登錄類型而變更。 如果您選擇 [Azure Container Registry],請使用下拉式清單來選取 Azure 訂用帳戶和容器登錄的名稱。 如果您選擇 [泛型容器登錄],請選取 [新增] 以建立登錄服務連線。 .template.json 檔案 選取省略符號 (...) 並瀏覽至存放庫中的 deployment.template.json 檔案,其包含您的 IoT Edge 解決方案。 預設平台 根據您的目標 IoT Edge 裝置為模組選取適當的作業系統。 將登錄認證新增到部署資訊清單 指定 true 以新增用來將 docker 映像推送到部署資訊清單的登錄認證。 如需此工作及其參數的詳細資訊,請參閱 Azure IoT Edge工作。
如果您有多個容器登錄可裝載您的模組映像,您需要複製此工作、選取不同的容器登錄,然後使用 [進階] 設定中的 [略過模組] 來略過不適用於此特定登錄的映像。
選取 [複製檔案] 工作來加以編輯。 使用此工作來將檔案複製到構件預備目錄。
參數 描述 Display name 使用預設名稱,或自訂 來源資料夾 包含要複製之檔案的資料夾。 目錄 新增兩行: deployment.template.json
和**/module.json
。 這兩個檔案會用作輸入,以產生 IoT Edge 部署資訊清單。目標資料夾 指定變數 $(Build.ArtifactStagingDirectory)
。 請參閱建置變數以了解描述。如需此工作及其參數的詳細資訊,請參閱複製檔案工作。
選取 [發行組建成品] 工作來編輯它。 提供工作的構件預備目錄路徑,以便能將路徑發佈至發行管線。
參數 描述 Display name 使用預設名稱,或自訂。 要發佈的路徑 指定變數 $(Build.ArtifactStagingDirectory)
。 若要深入了解,請參閱建置變數。成品名稱 使用預設名稱:drop 成品發佈位置 使用預設位置:Azure Pipelines 如需這項工作及其參數的詳細資訊,請參閱發佈組建成品工作。
開啟 [觸發程序] 索引標籤,然後核取 [啟用持續整合] 方塊。 請確定已納入包含程式碼的分支。
- 從 [儲存與佇列] 下拉式清單中選取 [儲存]。
此管線現在已設定為會在將新程式碼推送至存放庫時自動執行。 最後一個工作「發行管線成品」則會觸發發行管線。 繼續進行下一節以建置發行管線。
建立持續部署的發行管線
在本節中,您會建立發行管線,並將其設定為會在建置管線置放成品時自動執行,且會在 Azure Pipelines 中顯示部署記錄。
建立新的管線,並新增階段:
在 [管線] 下的 [發行] 索引標籤中,選擇 [+ 新建管線]。 或者,如果您已經有發行管線,請選擇 [+ 新增] 按鈕,然後選取 [+ 新增發行管線]。
當系統提示您選取範本時,選擇以 [空白作業] 開始。
您的新發行管線會以單一階段初始化,其名為階段 1。 將階段 1 重新命名為 dev,並將其視為開發環境的持續部署管線。 持續部署管線通常會有多個階段,包括 開發、預備,以及生產。您可以使用不同的名稱,並根據 DevOps 實務建立更多名稱。 重新命名後,請關閉階段詳細資料視窗。
您也可以選取頂端的 [新增發行管線] 文字,以重新命名發行管線。
將版本連結到由建置管線發佈的組建成品。 在成品區域中按一下 [新增]。
在 [新增成品] 頁面上,選取 [建置] 作為 [來源類型]。 選擇您所建立的專案和建置管線。 如果您希望,您可以將來源別名變更為更具描述性的名稱。 然後選取 [新增]。
開啟成品觸發程序,並選取切換以啟用持續部署觸發程序。 現在,每次有新的可用組建時,系統都會建立新的版本。
dev 階段已預先設定一個作業及零個工作。 從 [管線] 功能表中,選取 [工作],然後選擇 dev 階段。 選取 [代理程式作業],並將其 [顯示名稱] 變更為 QA。 您可以設定代理程式作業的相關詳細資料,但因為部署工作不會挑平台,所以您可以使用所選代理程式集區中的任何代理程式規格。
在 QA 作業上,選取加號 (+) 以新增兩項工作。 搜尋並新增 Azure IoT Edge 兩次。
選取第一個 Azure IoT Edge 工作,並為其設定下列值:
參數 描述 Display name [動作] 欄位變更時,會自動更新顯示名稱。 動作 選取 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 工作,並為其設定下列值:
參數 描述 Display name [動作] 欄位變更時,會自動更新顯示名稱。 動作 選取 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 工作 來將部署建立為分層部署。 對於 [內嵌指令碼 ] 值,您可以使用 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 管線以測試它是否有效。 接著驗證部署是否成功。
從左窗格功能表中,選取 [管線],然後開啟您在本文開頭中所建立的建置管線。
您可以選取右上角的 [執行管線] 按鈕來觸發建置管線中的建置作業。
檢閱 [執行管線] 設定。 然後,選取 [執行]。
選取 [代理程式作業 1] 以監看執行進度。 您可以選取作業來檢閱作業輸出的記錄。
如果建置管線順利完成,其會觸發針對 dev 階段的發行。 成功的 dev 發行會建立 IoT Edge 部署來鎖定 IoT Edge 裝置。
按一下 dev 階段以查看發行記錄。
如果您的管線失敗,請從查看記錄開始。 您可以瀏覽至管線執行摘要並選取作業和工作,以檢視記錄。 如果特定的工作失敗,請檢查該工作的記錄。 如需設定及使用記錄的詳細指示,請參閱檢閱記錄以診斷管線問題。
下一步
- 在了解單一裝置或大規模的 IoT Edge 部署中,了解 IoT Edge 部署。
- 逐步解說大規模部署和監視 IoT Edge 模組中,用來建立、更新或刪除部署的步驟。