如何通过Azure发布管道跨租户将项目工件部署到IIS服务器?
跨Azure租户部署IIS站点的Azure DevOps管道配置步骤
跨租户场景不需要打通两个Azure租户的Azure AD信任,按以下步骤配置即可完成部署,优先推荐部署组代理方案,对客户侧安全侵入性最小
一、客户租户IIS VM前置准备
- 在目标VM上创建部署专用的本地管理员账号,将账号加入本地
Administrators组,设置强密码,配置账号密码永不过期(仅限部署场景使用,禁止作为业务账号)。 - 确认IIS已提前创建好目标站点、对应.NET版本的应用程序池,给部署账号开放站点物理路径的完全控制权限,避免部署时出现文件读写权限报错。
- 网络规则配置:
- 如果选用部署组代理方案:只需要放开VM到Azure DevOps服务域名的443端口出站规则即可,不需要开放任何入站端口。
- 如果选用WinRM直连方案:需要放开VM的5985(HTTP)/5986(HTTPS)端口入站,放行你方Azure DevOps代理的出口IP段。
- 如果选用WinRM直连方案,需要提前在VM上以管理员身份执行
winrm quickconfig完成WinRM服务初始化,配置对应监听器,关闭WinRM路径上的防火墙拦截。
二、Azure DevOps侧连接配置(二选一即可)
方案1:部署组代理方案(优先推荐)
- 进入你方Azure DevOps项目的「管道-部署组」菜单,新建部署组,自定义命名后复制页面生成的代理注册PowerShell脚本。
- 将脚本发给客户侧VM管理员,要求对方在目标IIS VM上以管理员身份执行脚本,执行时按提示输入代理名称、自定义标签(比如
客户A-IIS、生产这类标签方便后续部署筛选),等待脚本执行完成。 - 回到Azure DevOps部署组页面,确认目标VM状态为在线,即连接完成。全程不需要客户向你方开放VM入站权限,代理会主动向Azure DevOps发起HTTPS长连接拉取部署任务。
方案2:WinRM服务连接方案(无需在VM安装额外代理)
- 进入你方Azure DevOps项目的「项目设置-服务连接」菜单,新建
WinRM类型的服务连接。 - 填写目标VM的可访问IP/域名、之前创建的部署专用管理员账号密码,勾选「授予所有管道访问权限」后保存,点击验证连接确认网络、账号权限正常即可。
注意:跨租户场景不需要创建Azure Resource Manager类型的服务连接,也不需要配置跨租户Azure AD应用注册,直接走WinRM协议连接即可,省去身份打通的复杂配置。
三、发布管道任务配置
- 新建发布管道,工件源选择现有构建管道产出的zip格式项目包,按需开启持续部署触发器。
- 部署作业配置:
- 用部署组代理方案时,作业类型选择「部署组作业」,选择之前创建的目标部署组,通过标签筛选出要部署的IIS VM。
- 用WinRM方案时,作业类型选择「代理作业」,运行代理选你方自有代理或微软托管代理,后续任务通过之前创建的WinRM服务连接远程执行。
- 按顺序添加部署任务:
- 第一步添加IIS应用管理任务,提前停止目标站点和对应的应用程序池,避免部署时出现文件被占用的报错。
- 第二步添加IIS Web应用部署任务,选择对应服务连接/部署目标,选中构建生成的zip包,按需配置部署参数:比如站点名称、应用程序池名称、是否删除目标目录多余文件、是否允许不受信任的证书(自签名证书场景需要加
-allowUntrusted参数)。 - 第三步添加IIS应用管理任务,部署完成后重新启动应用程序池和站点。
- 可选添加HTTP接口调用任务,访问站点健康检查地址,确认返回200状态码后标记部署成功。
- 涉及环境差异化配置(比如客户侧数据库连接串、第三方服务密钥),统一在管道变量中配置,敏感值标记为机密变量,不要硬编码在脚本或项目代码中。
四、可选优化配置
- 如果客户VM不暴露公网,可以通过专线/站点到站点VPN打通你方Azure DevOps代理池所在网络和客户租户VNet,所有流量走内网传输,不需要暴露公网端口。
- 建议客户侧定期轮换部署专用账号的密码,更新对应服务连接或代理配置即可,不需要调整其他管道逻辑。
- 可以在管道中添加审批规则,部署到客户生产环境前需要指定人员审批后再执行,避免误发布。
内容的提问来源于stack exchange,提问作者variable
相关产品推荐
相关产品推荐

