Azure Pipeline能否以不同用户身份触发第二条流水线解决同代理并行构建冲突
解决方案
实现可行性结论
该方案可实现,无需新增虚拟机,也无需额外触发第二条流水线,仅需在当前Windows主机配置两个不同用户身份运行的自托管代理即可解决注册表冲突问题。
具体操作步骤
- 第一步:在你当前使用的Windows自托管代理主机上安装2个独立的Azure DevOps自托管代理实例
- 分别创建2个本地Windows用户账号(例如命名为
AzDoBuildUser_x86、AzDoBuildUser_x64),为两个账号分配源代码目录、Visual Studio安装目录、构建输出目录的读写权限 - 两个代理分别放在不同的根目录下(例如
C:\AzDoAgent\x86、C:\AzDoAgent\x64),安装时分别用上述两个不同的用户账号配置为服务运行
- 分别创建2个本地Windows用户账号(例如命名为
- 第二步:为两个代理添加自定义能力标签
- 进入Azure DevOps的代理池管理页,找到上述两个代理,分别添加自定义功能键
BuildArch,x86代理对应值设为x86,x64代理对应值设为x64
- 进入Azure DevOps的代理池管理页,找到上述两个代理,分别添加自定义功能键
- 第三步:修改流水线矩阵配置
调整你的job配置,将矩阵变量和代理需求绑定,示例配置参考:jobs: - job: Build strategy: maxParallel: 2 matrix: x86_build: Arch: x86 BuildArchDemand: x86 x64_build: Arch: x64 BuildArchDemand: x64 pool: name: 你的自托管代理池名称 demands: - BuildArch -equals $(BuildArchDemand) steps: # 你的现有构建步骤,VSBuild任务无需修改,会自动使用代理运行用户的HKCU注册表路径 - task: VSBuild@1 inputs: # 保留你原来的VSBuild配置即可,仅需将平台参数替换为$(Arch)变量 platform: '$(Arch)' # 其他原有配置保持不变
注意事项
- 两个运行代理的用户需要预先登录过一次主机,完成VS的用户级初始化配置,避免构建时出现用户配置缺失的报错
- 确保两个构建任务的输出目录设置为不同路径,避免编译生成的文件互相覆盖
内容的提问来源于stack exchange,提问作者Ray Depew
相关产品推荐
相关产品推荐

