如何通过单条Azure Pipeline和Release向双环境同一IoT Edge设备发布两个模块
单Azure Pipeline+单Release实现双环境IoT Edge模块发布方案
1. 调整Release管道结构
- 在现有单个Release中新增两个独立阶段:
Staging部署、Production部署,可按需给Production阶段配置人工审批规则,避免误发布 - 两个阶段直接复用Build管道生成的产物,不需要重复执行模块构建逻辑
2. 拆分阶段级变量
把原全局配置的ACR地址、用户名、密码、IoT Hub连接串、设备ID等参数,拆分为阶段级私有变量:
- Staging阶段变量可统一加
stg_前缀,例如stg_acr_url、stg_iothub_connection - Production阶段变量可统一加
prod_前缀,例如prod_acr_url、prod_iothub_connection - 每个阶段执行任务时,优先读取当前阶段的变量值,不共用全局变量
3. 区分环境的镜像与模块标识
修改配置文件的参数规则,避免环境间资源冲突:
- 修改
module.json的镜像标签规则为${{ variables['EnvironmentName'] }}-$(Build.BuildId),最终Staging环境镜像标签形如stg-20240520.1,Production环境形如prod-20240520.1,避免同版本镜像互相覆盖 - 如果你是同一台IoT Edge设备同时运行两个环境的模块,还需要给模块名加环境前缀,例如
stg_xxx模块、prod_xxx模块,避免设备上模块命名冲突 - 若两个环境共用同一个ACR,可在Build阶段仅构建一次通用标签的镜像,Release各阶段给镜像追加当前环境的专属标签后再推送,减少重复构建耗时
4. 分阶段执行部署逻辑
每个阶段内按以下顺序执行任务即可:
- 变量替换:用
文件替换任务,把deployment.template.json中的占位符替换为当前阶段的变量值 - 生成部署清单:执行
Generate IoT Edge deployment manifest任务,指定当前阶段的变量组 - 设备部署:执行
Deploy to IoT Edge device任务,传入当前阶段对应的IoT Hub连接串、设备ID完成部署
5. 发布验证
先完成Staging阶段的部署与功能验证后,再触发Production阶段的审批与执行,到IoT Hub对应设备的模块列表中确认模块版本、运行状态符合预期即可。
内容的提问来源于stack exchange,提问作者Dragan
相关产品推荐
相关产品推荐

