当前位置: 首页 > 知识库问答 >
问题:

在PowerShell中使用Azure DevOps REST API更新构建定义

巢海
2023-03-14

我试图通过PowerShell脚本使用REST API更新我在Azure DevOps中的构建定义...

$header = @{Authorization = 'Basic ' + [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($personalAccessToken)"))}
$definitions = Invoke-RestMethod -Uri "https://devops.domain.com/Collection/Project/_apis/build/definitions" -Method GET -Header $header
$branchNames = 'master', 'feature'

ForEach ($definition in $definitions.value) {
    $definition | Add-Member -NotePropertyName triggers -NotePropertyValue (@{ triggerType = 'continuousIntegration'; branchFilters = $branchNames | % {"+refs/heads/$_/*"} }) -Force

    $body = $definition | ConvertTo-Json
    Write-Host $body

    Invoke-RestMethod -Uri "https://devops.domain.com/Collection/Project/_apis/build/definitions/$($definition.id)?api-version=5.0" -Method PUT -ContentType application/json -Body $body -Header $header
}

如何使用PowerShell和REST API实现这一点?

共有1个答案

方永贞
2023-03-14

triggers是数组,所以您不能只编辑它,您需要编辑triggers[0],就像编辑branchfilters一样,您需要编辑branchfilters[0]。此外,您不需要在triggertype中进行触摸。

以上所有这些都是假设构建中已经有一个触发器,并且您想要编辑它,而不是添加一个新的触发器部分。

BranchFilters数组中还有一个棘手的问题,如果只有1个分支(例如master),并且要添加另一个分支,则需要将其添加到数组中,而不仅仅是编辑BranchFilters[0]值。

最后应该修正的是分支的值,它应该是+refs/heads/branchname,而不仅仅是分支名。

因此,我有一个带有test分支触发器的管道,并成功地使用以下脚本将触发器编辑为masterfeature/*

# I get only one definition and update him, not iterate all my definitions
$definition = Invoke-RestMethod -Uri $url -Method Get

# Change the branch trigger from "test" to "master"
$definition.triggers[0].branchFilters[0] = "+refs/heads/master"

# Add another branch trigger - "feature/*"
$definition.triggers[0].branchFilters[0] += "+refs/heads/feature/*"

$body = $definition | ConvertTo-Json -Depth 10
Write-Host $body

Invoke-RestMethod -Uri $url -Method Put -ContentType application/json -Body $body
 类似资料:
  • 问题内容: 我有一个如下的json文件,我想使用更新值 update.json 我想编写一个PowerShell脚本,在其中 如何使用参数? 问题答案: 这是一种方法: 根据@FLGMwt和@mikemaccana,我改进了with,因为默认深度值为2,对于深度大于2的对象,尽管有对象,您仍会收到类信息。

  • 本文向大家介绍如何使用PowerShell创建新别名?,包括了如何使用PowerShell创建新别名?的使用技巧和注意事项,需要的朋友参考一下 任何人都可以创建一个新的别名,该别名是另一个命令的快捷方式。若要创建自己的别名,您需要使用Set-Alias cmdlet。在这里,我们将创建一个新的别名Edit,它将打开一个Notepad.exe。首先,我们将检查是否存在“编辑别名”。 由于这将是一个新

  • Android新构建系统需要Gradle 1.10+版本。如何在内部配置?

  • 我想使用DynamoDBMapper只更新项目的特定属性。例如,我有一个带有属性的用户表。,id,name,地址。 我想只更新地址属性,而不是其他字段(选择性更新)。 我可以使用UpdateItemSpec找到一个示例,但在DynamoDBMapper中找不到。使用UpdateItemSpec,我可以使用withUpdateExpression()定义更新表达式。更多细节可以在这里找到。 是否有任

  • } 预期的结果应该是:当编写'test-argumentcompleterf'时,点击tub按钮后,F autocompleted到ful。提前感谢您的帮助!

  • 在构建中使用自定义Ant任务 为了让你的构建可以自定义任务, 你可以使用 taskdef(通常更容易) 或者 typedef Ant 任务, 就像你在一个build.xml文件中一样. 然后,你可以参考内置 Ant 任务去定制 Ant 任务. 例 16.5.使用自定义 Ant 任务 build.gradle task check << { ant.taskdef(resource: 'ch