【问题标题】:How to add branch policies using powershell Invoke RestMethod如何使用 powershell Invoke RestMethod 添加分支策略
【发布时间】:2021-10-15 20:58:08
【问题描述】:

我们有 PowerShell 脚本可以自动创建分支。

现在我们正在尝试使用 PowerShell Invoke-RestMethod 使用 api 自动化分支策略。

我们可以选择使用跨存储库策略手动添加策略,但我们为存储库启用了构建验证,这对于每个存储库都不同。

我可以使用GET https://dev.azure.com/$organization/$project/_apis/policy/configurations/repo=$repoName&api-version=6.0 获取策略配置 但不知道如何获取特定值并添加策略。

【问题讨论】:

  • Raw Git 根本没有“分支策略”。附加组件,如在 GitHub、Bitbucket、Azure 等上使用的那样,以各自的方式添加它们,所以你在这里说“Azure”很好。 :-)

标签: powershell azure-devops azure-devops-rest-api azure-repos


【解决方案1】:

您可以使用Configurations - Create Rest API:

POST https://dev.azure.com/{organization}/{project}/_apis/policy/configurations/{configurationId}?api-version=6.1-preview.1

在正文中指定要添加的分支策略,例如 - 构建策略:

{
  "isEnabled": true,
  "isBlocking": false,
  "type": {
    "id": "0609b952-1397-4640-95ec-e00a01b2c241"
  },
  "settings": {
    "buildDefinitionId": 5,
    "scope": [
      {
        "repositoryId": null,
        "refName": "refs/heads/feature",
        "matchKind": "prefix"
      }
    ]
  }
}

在上面的正文中,您将分支(构建)策略添加到需要构建 5 才能通过的分支 feature

您可以在Types - List api 中查看所有可用的策略类型。

【讨论】:

  • 您好,感谢您的快速回复。我现在可以添加构建验证。我们可以用姓名代替身份证吗?我的意思是,在 json 文件中,我可以给出 Name 和 buildDefinition 名称而不是 id 和 buildDefinitionId 吗?谢谢!
  • 我不确定 :/ 试试看吧 :)
【解决方案2】:

要在分支策略中添加构建验证,您可以参考以下 PowerShell 示例:

$token = "PAT"

$url="https://dev.azure.com/{OrganizationName}/{ProjectName}/_apis/policy/configurations?api-version=6.1-preview.1"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$JSON = @'
{
 "type":{
        "id":"0609b952-1397-4640-95ec-e00a01b2c241"
    },
    "revision":1,
    "isDeleted":false,
    "isBlocking":true,
    "isEnabled":true,
    "settings":{
        "buildDefinitionId":592,
        "displayName":null,
        "manualQueueOnly":false,
        "queueOnSourceUpdateOnly":true,
        "validDuration":720,
        "scope":[
            {
                "repositoryId":"RepoID",
                "refName":"refs/heads/BranchName",
                "matchKind":"Exact"
                }
                ]
            }
}
'@

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method POST -Body $JSON -ContentType application/json

关于Configurations - CreateRepositories - List,您可以参考此文档

结果:

【讨论】:

  • 您好,感谢您的快速回复。我现在可以添加构建验证。我们可以用名字代替身份证吗?我的意思是,在上面的 json 文件中,我可以给出 Name 和 buildDefinition 名称而不是 id 和 buildDefinitionId 吗?谢谢!
  • @Kart。恐怕它只能支持ID和builddefinitionid。明确type参数中的id,id指向Build Validation,如果只想添加build Validation,不需要更改type id。
  • @Kart。有关于这个问题的更新吗?如果答案能给你一些帮助,请随时告诉我。只是提醒this
  • 我认为我们只能给出 id 而不是 name。我现在可以添加构建验证。你能帮我克隆构建管道吗?我已经收集了参数并尝试发布此$build_url = "https://dev.azure.com/$organization/$project/_apis/build/definitions?api-version=5.0-preview.7",但出现以下错误。 Invoke-RestMethod : {"$id":"1","innerException":null,"message":"值不能为空。\r\n参数名称:define.Process","typeName":"System.ArgumentNullException, mscorlib","typeKey":"ArgumentNullException","errorCode":0,"eventId":0}
  • 您可以在工单中查看答案
猜你喜欢
  • 1970-01-01
  • 2015-02-04
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多