我们最近使用 Azure DevOps 迁移工具将一些构建迁移到不同的 Azure DevOps 环境。构建管道指向微软托管代理,但由于问题而失败
未指定池
新创建的构建可以使用相同的构建配置正常工作。随附的屏幕截图包含完全相同的示例 yaml,但是迁移的构建因错误而失败,而新创建的构建工作正常。
azure-pipelines.yml
中指定的池实际上似乎并未被Azure使用; 相反,您必须通过 GUI 进行设置。来自管道编辑器:
我们最近经历了完全相同的情况。以下是您可能遇到的情况:
当 ADO 迁移工具迁移构建管道时,它将管道触发器的
Default agent pool for YAML
字段留空。即使没有这条强制性信息,您仍然可以保存并验证管道(这是正确的,因为工作流程是您首先定义管道,然后才添加所需的所有触发器)。似乎 ADO 的设计方式是,除非您在 GUI 中的管道设置中指定了默认池,否则不会选取 yaml 管道定义中定义的代理池。然后,当您运行管道时,您看到的错误消息本质上意味着 ADO 检查是否存在默认管道,当没有找到任何默认管道时,它会中止运行,甚至无需在 yaml 文件中查找另一个代理池。
当我们使用
Import repository
功能将存储库从一个项目克隆到另一个项目时,同样的情况也发生在我们身上。如果 Azure DevOps 在导入的存储库中检测到 yaml 管道定义,它会自动创建一个新的构建管道,但会将默认代理池字段留空(当然不会告诉您)。当您手动构建新管道时,不会发生这种情况,因为在这种情况下,ADO 足够智能,可以使用 ADO 管理员在组织级别定义的默认代理池填充此字段。但似乎“导入存储库”功能和 ADO 迁移工具忽略了默认代理池设置。