你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
多步骤有序执行
使用多步骤有序执行,你可以在部署无线更新时运行预安装任务和安装后任务。 此功能是公共预览版刷新更新清单 v4 架构的一部分。
在查看公共预览版刷新版本中的以下更改之前,请参阅更新清单文档。
使用多步骤有序执行时,有两种类型的步骤:
- 内联步骤(默认)
- 引用步骤
使用一个内联步骤的示例更新清单:
{
"updateId": {...},
"isDeployable": true,
"compatibility": [
{
"manufacturer": "du-device",
"model": "e2e-test"
}
],
"instructions": {
"steps": [
{
"description": "Example APT update that install libcurl4-doc on a host device.",
"handler": "microsoft/apt:1",
"files": [
"apt-manifest-1.0.json"
],
"handlerProperties": {
"installedCriteria": "apt-update-test-1.0"
}
}
]
},
"manifestVersion": "4.0",
"importedDateTime": "2021-11-16T14:54:55.8858676Z",
"createdDateTime": "2021-11-16T14:50:47.3511877Z"
}
使用两个个内联步骤的示例更新清单:
{
"updateId": {...},
"isDeployable": true,
"compatibility": [
{
"manufacturer": "du-device",
"model": "e2e-test"
}
],
"instructions": {
"steps": [
{
"description": "Install libcurl4-doc on host device",
"handler": "microsoft/apt:1",
"files": [
"apt-manifest-1.0.json"
],
"handlerProperties": {
"installedCriteria": "apt-update-test-2.2"
}
},
{
"description": "Install tree on host device",
"handler": "microsoft/apt:1",
"files": [
"apt-manifest-tree-1.0.json"
],
"handlerProperties": {
"installedCriteria": "apt-update-test-tree-2.2"
}
}
]
},
"manifestVersion": "4.0",
"importedDateTime": "2021-11-16T20:21:33.6514738Z",
"createdDateTime": "2021-11-16T20:19:29.4019035Z"
}
使用一个引用步骤的示例更新清单:
引用子更新的父更新
{ "updateId": {...}, "isDeployable": true, "compatibility": [ { "manufacturer": "du-device", "model": "e2e-test" } ], "instructions": { "steps": [ { "type": "reference", "description": "Cameras Firmware Update", "updateId": { "provider": "contoso", "name": "virtual-camera", "version": "1.2" } } ] }, "manifestVersion": "4.0", "importedDateTime": "2021-11-17T07:26:14.7484389Z", "createdDateTime": "2021-11-17T07:22:10.6014567Z" }
使用内联步骤的子更新
{ "updateId": { "provider": "contoso", "name": "virtual-camera", "version": "1.2" }, "isDeployable": false, "compatibility": [ { "group": "cameras" } ], "instructions": { "steps": [ { "description": "Cameras Update - pre-install step", "handler": "microsoft/script:1", "files": [ "contoso-camera-installscript.sh" ], "handlerProperties": { "scriptFileName": "contoso-camera-installscript.sh", "arguments": "--pre-install-sim-success --component-name --component-name-val --component-group --component-group-val --component-prop path --component-prop-val path", "installedCriteria": "contoso-virtual-camera-1.2-step-0" } }, { "description": "Cameras Update - firmware installation (failure - missing file)", "handler": "microsoft/script:1", "files": [ "contoso-camera-installscript.sh", "camera-firmware-1.1.json" ], "handlerProperties": { "scriptFileName": "missing-contoso-camera-installscript.sh", "arguments": "--firmware-file camera-firmware-1.1.json --component-name --component-name-val --component-group --component-group-val --component-prop path --component-prop-val path", "installedCriteria": "contoso-virtual-camera-1.2-step-1" } }, { "description": "Cameras Update - post-install step", "handler": "microsoft/script:1", "files": [ "contoso-camera-installscript.sh" ], "handlerProperties": { "scriptFileName": "contoso-camera-installscript.sh", "arguments": "--post-install-sim-success --component-name --component-name-val --component-group --component-group-val --component-prop path --component-prop-val path", "installedCriteria": "contoso-virtual-camera-1.2-stop-2" } } ] }, "referencedBy": [ { "provider": "DU-Client-Eng", "name": "MSOE-Update-Demo", "version": "3.1" } ], "manifestVersion": "4.0", "importedDateTime": "2021-11-17T07:26:14.7376536Z", "createdDateTime": "2021-11-17T07:22:09.2232968Z", "etag": "\"ad7a553d-24a8-492b-9885-9af424d44d58\"" }
注意
在更新清单中,如果使用该字符串来确定是否应执行该步骤,则每个步骤应具有不同的 installedCriteria 字符串。
父更新和子更新
当更新清单相互引用时,顶级清单称为父更新,引用步骤中指定的清单称为子更新。
目前,子更新不能包含任何引用步骤。 此限制在导入时进行验证,如果未遵循,则导入将失败。
父更新中的内联步骤
父更新中指定的内联步骤应用于主机设备。 此处传递给步骤处理程序(也称为更新内容处理程序)的 ADUC_WorkflowData 对象不包含 Selected Components
数据。 这种类型的步骤的处理程序不应是 Component-Aware
处理程序。
步骤内容处理程序针对每个步骤应用 IsInstalled 验证逻辑。 设备更新代理的步骤处理程序通过检查 IsInstalled () 是否导致结果代码“900”(表示“true”)来查看是否已安装特定更新。 如果已安装更新,为了避免重新安装设备上已有的更新,DU 代理将跳过以后的步骤,因为我们使用它来确定是否执行该步骤。
若要报告更新结果,必须将步骤处理程序执行的结果写入所需结果文件中的 ADUC_Result 结构中,如 --result-file 选项中指定的那样。 然后,根据执行的结果,如果成功则返回 0;如果出现任何错误,则返回 -1 或 0xFF。
有关详细信息,请参阅步骤内容处理程序和实现自定义组件感知内容处理程序。
父更新中的引用步骤
父更新中指定的引用步骤应用于主机设备上的组件或连接到主机设备的组件。 引用步骤是包含另一个更新(称为子更新)的更新标识符的步骤。
处理引用步骤时,步骤处理程序会下载引用步骤数据中指定的分离更新清单文件,然后验证文件完整性。 接下来,步骤处理程序分析子更新清单并创建 ADUC_Workflow 对象(也称为子工作流数据),具体方法为合并来自子更新清单的数据和父更新清单中的文件 URL 信息。 此子工作流数据还具有设置为“1”的“level”属性。
注意
目前,子更新不能包含任何引用步骤。
分离的更新清单
为了避免由于 IoT 中心孪生数据大小限制而导致部署失败,任何大型更新清单都将以 JSON 数据文件的形式传递,也称为“分离的更新清单”。
如果将包含大量内容的更新导入到 Device Update for IoT Hub 中,则生成的更新清单将包含名为 Detached Update Manifest
的另一个有效负载文件,该文件包含更新清单的完整数据。
设备或模块孪生中的 UpdateManifest
属性将包含分离的更新清单文件信息。
处理 PnP 属性更改事件时,设备更新代理将自动下载分离的更新清单文件,并创建包含完整的更新清单数据的 ADUC_WorkflowData 对象。