Azure DevOps技术问询:如何通过API及azure-devops-node-api取消勾选“Override the YAML continuous integration trigger from here”复选框?
如何通过azure-devops-node-api取消勾选“Override the YAML continuous integration trigger from here”复选框
这个问题的核心在于:那个复选框的状态并不是由某个显式的布尔属性控制,而是由构建定义中是否存在triggers字段决定的。当你在UI中勾选它时,Azure DevOps会在构建定义里添加triggers节点(哪怕是空数组);反之,取消勾选就需要完全移除这个triggers字段,而不是设置为空数组或None类型触发器。
具体解决步骤
- 获取目标构建定义:先通过API拉取你要修改的构建定义详情
- 移除
triggers属性:直接删除定义对象中的triggers键(不要设置为空数组或其他值) - 更新构建定义:将修改后的定义推回Azure DevOps
代码示例(使用azure-devops-node-api)
const azdev = require('azure-devops-node-api'); async function disableYamlTriggerOverride() { // 替换为你的组织URL、PAT、项目名和构建定义ID const orgUrl = 'https://dev.azure.com/your-organization'; const personalAccessToken = 'your-pat-token'; const projectName = 'your-project'; const definitionId = 123; // 建立API连接 const authHandler = azdev.getPersonalAccessTokenHandler(personalAccessToken); const connection = new azdev.WebApi(orgUrl, authHandler); const buildApi = await connection.getBuildApi(); // 获取现有构建定义 const buildDefinition = await buildApi.getDefinition(projectName, definitionId); // 关键:移除triggers属性,而不是设置为空 delete buildDefinition.triggers; // 更新构建定义 await buildApi.updateDefinition(buildDefinition, projectName, definitionId); console.log("已成功取消勾选YAML触发器覆盖复选框"); } // 执行函数 disableYamlTriggerOverride().catch(err => console.error("操作失败:", err));
为什么之前的方法无效?
- 设置空的
triggers数组:这相当于告诉Azure DevOps“我要覆盖YAML触发器,但暂时没有配置任何触发器”,所以UI里的复选框依然会保持勾选状态 - 使用类型为None的触发器:本质还是在
triggers字段中添加了配置,同样会触发复选框的勾选状态 - 只有完全移除
triggers字段,Azure DevOps才会判定你没有启用YAML触发器覆盖,自动取消那个复选框
额外注意事项
- 确保你的PAT拥有构建定义编辑权限(至少是Build Definitions的Edit权限)
- 如果直接调用REST API(而非使用node-api包),在PUT请求的请求体中不要包含
triggers字段即可 - 修改后可以通过UI刷新验证,或者调用API拉取定义确认
triggers字段已被移除
内容的提问来源于stack exchange,提问作者walkerrandophsmith
相关产品推荐
相关产品推荐

