自定义 Azure DevOps REST API 调用

Customizing Azure DevOps REST API call

我正在使用 Azure DevOps 的 REST API 来处理发布管道。
发布管道使用任务作为代理作业的一部分。 此任务使用 ARM 模板文件和参数文件将 VM 部署到 Azure。 到目前为止,我可以使用 Azure DevOps REST APIs 成功执行发布管道,并使用下面的代码成功部署 VM。

snippet of the GUI

使用 GUI 我还可以在执行时成功自定义发布管道。例如,我可以在屏幕截图下方的“覆盖模板参数”字段中添加值。

但是在搜索之后,我没有从 Microsoft 那里看到任何关于在他们的 Azure DevOps REST API 文档中执行发布管道时如何访问任务中的字段。

如何修改下面代码中的“响应主体”以在调用此管道时访问管道任务中的字段之一,例如“覆盖模板参数”?

const sendHttpRequest = (method, url, reqBody) => 
{
  const promise = new Promise((resolve,reject) =>
  {
    const request = new XMLHttpRequest();
    request.open(method, url, true);                                                    // Send a request
    request.setRequestHeader('Content-Type', 'application/json');                     // Build the request header
    request.setRequestHeader ("Authorization", "Basic " + btoa('Basic' + ":" + pat)); // Supply authentication

    request.onload = () =>
    {                                                                                 // Retrieve the response
                                                                                      // Check the status of the request...
      if (request.status >= 200 && request.status < 400)
      {
        myOutput.innerHTML = "Request Status: Valid | "; 
        resolve(request.response);
      }
      else
      {
        myOutput.innerHTML = "Request Status: Invalid |";
        reject(request.response);
      }
    } // onload

    request.send(JSON.stringify(reqBody));
  }); // promise

  return promise;
};
/*
  Execute a pipeline
*/
function run_pipeline()
{
  var reqLink = 'https://dev.azure.com/'+ org_name+'/'+ prj_name+'/_apis/pipelines/'+pipeline_id+'/runs?api-version=6.0-preview.1';

  // CHANGE RESPONSE BODY TO THE DESIRED PIPELINE NEEDED TO BE RUN
  responseBody = {
    "previewRun": "false",
    "resources": null,
    "stagesToSkip": null,
    "templateParameters": null,
    "variables": null,
    "yamlOverride": null
  };

  sendHttpRequest('POST', reqLink, responseBody).then(responseData =>
    {
      // parse the obtained data
      var data = JSON.parse(responseData);
      myOutput.innerHTML += " Pipeline Executed!";
      console.log(data);
    })
    .catch(error => 
    {
      var message = JSON.parse(error);
      myOutput.innerHTML += " Error with Data...";
      console.log(message);
    });
};

如果您需要获取发布管道任务中的字段。您可能需要使用 get release rest api

GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/Release/releases/{releaseId}/environments/{environmentId}?api-version=6.0-preview.6

您可以从发布 ui 地址栏中获取发布 ID 和环境 ID。见下文:

然后你会在响应中找到任务的字段(deployPhasesSnapshot -->workflowTasks-->输入)

更新:

如果要更新 storageName 参数。请按照以下步骤操作:

1、创建一个名为storageName的管道变量。并检查 Settable at release time。请参阅下面的屏幕截图:

2、设置部署任务的override template parameters字段如下:

3、如果要创建新版本。你可以打电话给create release rest api

POST https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases?api-version=5.1

然后更新请求正文中的管道变量storageName。见下文:

请求正文:

{
    "definitionId": 7,

    "variables": {  
                    "storageName": {
                                      "value": "foo" 
                                   }
                 }
}

然后 storageName 参数将被覆盖为 "foo"。

更新二:

如果您想更新现有版本。您需要致电 update release environment rest api

 PATCH https://vsrm.dev.azure.com/{organization}/{project}/_apis/Release/releases/{releaseId}/environments/{environmentId}?api-version=5.1-preview.6.

首先,您需要将管道变量 storageName 范围设置为其阶段。见下文:

然后更新请求正文中的 storageName 值。并将 status 设置为 inProgress 以重新部署舞台。这样覆盖的 storageName 将反映在发布中。

{
    "status": "inProgress",


    "variables": {  
                    "storageName": {
                                      "value": "storageName-rest-api-three" 
                                   }
                 }
}