Skip to content

Azure DevOps 中 "xamarinandroid" 模板未找到的解决方案

问题描述

最近在 Azure DevOps 中创建新的流水线时,许多用户遇到了一个棘手的错误:No template with an identifier of 'xamarinandroid' could be found

这个错误通常出现在选择仓库后的配置步骤,即使你的项目与 Xamarin 完全无关。界面中不会显示任何可选择的选项,导致无法完成流水线创建流程。

问题特征

  • 错误信息:No template with an identifier of 'xamarinandroid' could be found
  • 发生时间:约2025年2月中旬开始出现
  • 影响范围:私有 Azure DevOps 项目
  • 典型场景:通过 Web 界面创建新流水线时

解决方案

以下是几种经过验证的有效解决方案,你可以根据具体情况选择最适合的方法。

方法一:使用经典流水线编辑器

Azure DevOps 的经典流水线编辑器仍然可用且不受此问题影响:

  1. 导航到你的 Azure DevOps 项目
  2. 选择 "Pipelines" → "Create Pipeline"
  3. 点击 "Use the classic editor" 链接
  4. 按照正常流程配置你的流水线

优点

  • 无需修改代码或配置文件
  • 界面直观易用
  • 立即生效

方法二:预先准备有效的 YAML 文件

在仓库根目录放置一个有效的 azure-pipelines.yml 文件:

yaml
# azure-pipelines.yml 最小示例
trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- script: echo "Hello, world!"
  displayName: 'Run a one-line script'

操作步骤:

  1. 在仓库根目录创建有效的 azure-pipelines.yml 文件
  2. 提交并推送此文件到远程仓库
  3. 现在尝试通过 Web 界面创建新流水线

方法三:使用 Azure CLI 创建流水线

通过命令行工具绕过有问题的 Web 界面:

  1. 安装 Azure CLI 和 Azure DevOps 扩展:
bash
az extension add --name azure-devops
  1. 登录并配置默认值:
bash
az login
az devops configure --defaults organization=https://dev.azure.com/your-organization project=your-project
  1. 创建流水线:
bash
az pipelines create --name 'NewBuild' --description 'PipelineForYourProject' --repository SampleRepoName --branch main --repository-type tfsgit

方法四:使用 REST API 创建流水线

对于需要更精细控制的场景,可以直接调用 DevOps REST API:

bash
# 设置个人访问令牌
export PAT="your-personal-access-token"

# 创建流水线
http POST https://dev.azure.com/{organization}/{project}/_apis/pipelines?api-version=7.1 \
  Authorization:"Bearer $PAT" \
  < create-pipeline.json
json
{
  "folder": null,
  "name": "pipeline-name",
  "configuration": {
    "type": "yaml",
    "path": "/azure-pipelines.yml",
    "repository": {
      "id": "d862c503-f545-47bc-913b-575c48f99864",
      "name": "repo-name-exactly",
      "type": "azureReposGit"
    }
  }
}

重要提示

  • repository.id 可以在项目设置 → 仓库 → 选择你的仓库中获取
  • 需要在用户设置中创建个人访问令牌(PAT)
  • 确保 YAML 文件路径正确

方法五:使用 VS Code REST Client 扩展

对于开发人员,可以使用 VS Code 的 REST Client 扩展:

  1. 安装 REST Client 扩展
  2. 创建 .http 文件:
http
@token=your-actual-personal-access-token
@organization=your-organization
@project=your-project
@repositoryName=your-repository-name
@repositoryId=the-id-of-the-repository

POST https://dev.azure.com/{{organization}}/{{project}}/_apis/pipelines/?api-version=7.1
content-type: application/json
Authorization: Bearer {{token}}

{
  "folder": "/Publish",
  "name": "pipeline-name",
  "configuration": {
    "type": "yaml",
    "path": "azure-pipelines.yml",
    "repository": {
      "id": "{{repositoryId}}",
      "name": "{{repositoryName}}",
      "type": "azureReposGit"
    }
  }
}
  1. 点击 "Send Request" 发送请求

根本原因分析

这个问题似乎是 Azure DevOps Web 界面中的一个临时 bug,特别是自动模板检测逻辑出现了异常。系统错误地将所有项目识别为 Xamarin.Android 项目,从而试图加载不存在的模板。

技术背景

  • 受影响组件:Azure DevOps 流水线创建向导
  • 根本原因:模板检测逻辑缺陷
  • 状态:微软已知问题,预计会在后续更新中修复

最佳实践建议

  1. 版本控制你的流水线配置:始终将 azure-pipelines.yml 文件纳入版本控制
  2. 使用基础设施即代码:优先使用 YAML 配置而非界面配置
  3. 备用创建方法:熟悉 CLI 和 REST API 等替代创建方式
  4. 文档化流程:为团队记录流水线创建和管理的标准操作流程

总结

虽然 "xamarinandroid" 模板未找到的错误令人困扰,但通过上述解决方案,你仍然可以成功创建和管理 Azure DevOps 流水线。推荐优先使用方法二(预先准备 YAML 文件)或方法一(经典编辑器),这些方法简单且不需要额外的工具配置。

长期建议

随着微软修复此问题,建议还是回归使用标准的 Web 界面创建流程,但同时保留对替代方法的了解,以应对未来可能出现的类似问题。