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 的经典流水线编辑器仍然可用且不受此问题影响:
- 导航到你的 Azure DevOps 项目
- 选择 "Pipelines" → "Create Pipeline"
- 点击 "Use the classic editor" 链接
- 按照正常流程配置你的流水线
优点
- 无需修改代码或配置文件
- 界面直观易用
- 立即生效
方法二:预先准备有效的 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'
操作步骤:
- 在仓库根目录创建有效的
azure-pipelines.yml
文件 - 提交并推送此文件到远程仓库
- 现在尝试通过 Web 界面创建新流水线
方法三:使用 Azure CLI 创建流水线
通过命令行工具绕过有问题的 Web 界面:
- 安装 Azure CLI 和 Azure DevOps 扩展:
bash
az extension add --name azure-devops
- 登录并配置默认值:
bash
az login
az devops configure --defaults organization=https://dev.azure.com/your-organization project=your-project
- 创建流水线:
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 扩展:
- 安装 REST Client 扩展
- 创建
.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"
}
}
}
- 点击 "Send Request" 发送请求
根本原因分析
这个问题似乎是 Azure DevOps Web 界面中的一个临时 bug,特别是自动模板检测逻辑出现了异常。系统错误地将所有项目识别为 Xamarin.Android 项目,从而试图加载不存在的模板。
技术背景
- 受影响组件:Azure DevOps 流水线创建向导
- 根本原因:模板检测逻辑缺陷
- 状态:微软已知问题,预计会在后续更新中修复
最佳实践建议
- 版本控制你的流水线配置:始终将
azure-pipelines.yml
文件纳入版本控制 - 使用基础设施即代码:优先使用 YAML 配置而非界面配置
- 备用创建方法:熟悉 CLI 和 REST API 等替代创建方式
- 文档化流程:为团队记录流水线创建和管理的标准操作流程
总结
虽然 "xamarinandroid" 模板未找到的错误令人困扰,但通过上述解决方案,你仍然可以成功创建和管理 Azure DevOps 流水线。推荐优先使用方法二(预先准备 YAML 文件)或方法一(经典编辑器),这些方法简单且不需要额外的工具配置。
长期建议
随着微软修复此问题,建议还是回归使用标准的 Web 界面创建流程,但同时保留对替代方法的了解,以应对未来可能出现的类似问题。