Azure Pipelines:批量批准部署到环境

eba*_*kov 9 azure-devops azure-pipelines

有没有办法通过 CLI 或 API(或其他任何东西)批准运行?我正在寻找一种方法来批量批准来自不同管道的多次运行,但它在 UI 中不可用。

假设我有 100 个管道,它们具有到生产环境的部署作业。我想批准所有等待批准的运行。

目前,我在 Azure DevOps REST API 或 CLI 的文档中找不到类似的内容。

功能文档:https : //docs.microsoft.com/en-us/azure/devops/pipelines/process/environments https://docs.microsoft.com/en-us/azure/devops/pipelines/process/approvals

以下问题是相关的,但我正在寻找解决它的任何方法,但不仅仅是通过 API: 使用 REST api 在 Azure DevOps 中批准 yaml 管道部署

Seb*_*tze 8

我只是在寻找有关获取您需要的批准 ID 的答案。事实上,有一个未记录的 API 来批准批准检查。

这是梅林解释如下

https://dev.azure.com/{org}/{project}/_apis/pipelines/approvals/{approvalId}
Run Code Online (Sandbox Code Playgroud)

身体必须看起来像这样

[{
    "approvalId": "{approvalId}",
    "status": {approvalStatus},
    "comment": ""
}]
Run Code Online (Sandbox Code Playgroud)

{approvalStatus}如果您批准与否,在哪里告诉 API。你可能必须尝试,但我有4一个状态。我想只有两种可能性。无论是“批准”还是“拒绝”。

现在的问题是您如何获得批准 ID?我找到了。您可以通过使用经典构建的时间线 API 来获得它。在构建API文档说,你通过以下得到它

https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}?api-version=5.1
Run Code Online (Sandbox Code Playgroud)

您在构建运行的响应中获得的构建时间线,但它有一个模式

https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/Timeline?api-version=5.1
Run Code Online (Sandbox Code Playgroud)

除了平面阵列容器之外,阶段、阶段、作业和任务的父/子关系,您还可以在其中找到如下内容:

{
  "records": [
    {
      "previousAttempts": [
        
      ],
      "id": "95f5837e-769d-5a92-9ecb-0e7edb3ac322",
      "parentId": "9e7965a8-d99d-5b8f-b47b-3ee7c58a5b1c",
      "type": "Checkpoint",
      "name": "Checkpoint",
      "startTime": "2020-08-14T13:44:03.05Z",
      "finishTime": null,
      "currentOperation": null,
      "percentComplete": null,
      "state": "inProgress",
      "result": null,
      "resultCode": null,
      "changeId": 73,
      "lastModified": "0001-01-01T00:00:00",
      "workerName": null,
      "details": null,
      "errorCount": 0,
      "warningCount": 0,
      "url": null,
      "log": null,
      "task": null,
      "attempt": 1,
      "identifier": "Checkpoint"
    },
    {
      "previousAttempts": [
        
      ],
      "id": "9e7965a8-d99d-5b8f-b47b-3ee7c58a5b1c",
      "parentId": null,
      "type": "Stage",
      "name": "Power Platform Test (orgf92be262)",
      "startTime": null,
      "finishTime": null,
      "currentOperation": null,
      "percentComplete": null,
      "state": "pending",
      "result": null,
      "resultCode": null,
      "changeId": 1,
      "lastModified": "0001-01-01T00:00:00",
      "workerName": null,
      "order": 2,
      "details": null,
      "errorCount": 0,
      "warningCount": 0,
      "url": null,
      "log": null,
      "task": null,
      "attempt": 1,
      "identifier": "Import_Test"
    },
    {
      "previousAttempts": [
        
      ],
      "id": "e54149c5-b5a7-4b82-8468-56ad493224b5",
      "parentId": "95f5837e-769d-5a92-9ecb-0e7edb3ac322",
      "type": "Checkpoint.Approval",
      "name": "Checkpoint.Approval",
      "startTime": "2020-08-14T13:44:03.02Z",
      "finishTime": null,
      "currentOperation": null,
      "percentComplete": null,
      "state": "inProgress",
      "result": null,
      "resultCode": null,
      "changeId": 72,
      "lastModified": "0001-01-01T00:00:00",
      "workerName": null,
      "details": null,
      "errorCount": 0,
      "warningCount": 0,
      "url": null,
      "log": null,
      "task": null,
      "attempt": 1,
      "identifier": "e54149c5-b5a7-4b82-8468-56ad493224b5"
    }
  ],
  "lastChangedBy": "00000002-0000-8888-8000-000000000000",
  "lastChangedOn": "2020-08-14T13:44:03.057Z",
  "id": "86fb4204-9c5e-4e72-bdb1-eefe230480ec",
  "changeId": 73,
  "url": "https://dev.azure.com/***"
}
Run Code Online (Sandbox Code Playgroud)

下面您可以看到一个名为“Checkpoint.Approval”的步骤。该步骤的ID IS你需要批准的一切批准编号。如果想知道审批是从哪个阶段开始的,那么可以跟踪parentIds,直到parentId属性为null。这将是舞台。

有了这个,您可以成功获得批准 ID 并使用它来批准上述


Mer*_*SFT 5

jessehouwing 的猜测是正确的。现在多阶段还在预览中,相应的SDK/API/extension还没有扩展和提供给公众。

您可能会认为不使用 API 会怎样。我已经检查了后端的相应代码,所有操作都multi-stage approval包含一个必需的参数:approvalId. 相信大家都知道这个值是唯一的,不同的审批图有不同的approvalId值。这意味着,无论您想尝试哪种方法,approvalId都是大麻烦。而且据我所知,到目前为止,还没有任何 api/SDK、第三个工具或扩展可以直接实现此值。


另外,对于multi-stageYAML,其发布流程逻辑与用UI定义的发布不同。因此,所有可以与发布(UI)一起使用的公共 API 都不适合多阶段发布。

我们有一个未公开的api,可以获取Approval多阶段的消息:

https://dev.azure.com/{org}/{project}/_apis/pipelines/approvals/{approvalId}
Run Code Online (Sandbox Code Playgroud)

您可以尝试在不指定approvalId: 的情况下获得上市批准https://dev.azure.com/{org}/{project}/_apis/pipelines/approvals。以及它的响应消息:Query for approvals failed. A minimum of one query parameter is required.\r\nParameter name: queryParameters.这代表你必须告诉系统指定的approval(我之前提到的大麻烦)。

其实,为什么approvalId是必要的部分,是由我们的后端代码结构造成的。我建议您在此处提出有关为多阶段开发 API/SDK 的建议。