簡體   English   中英

自定義 Azure DevOps REST API 調用

[英]Customizing Azure DevOps REST API call

我正在使用 Azure DevOps 的 REST API 來處理發布管道。
發布管道使用任務作為代理作業的一部分。 此任務使用 ARM 模板文件和參數文件將 VM 部署到 Azure。 到目前為止,我可以使用 Azure DevOps REST API 成功執行發布管道,並使用以下代碼成功部署 VM。

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

您可以從 Release ui 地址欄獲取 release id 和 environment id。 見下文:

在此處輸入圖像描述

然后你會在響應中找到任務的字段( deployPhasesSnapshot --> workflowTasks --> inputs

在此處輸入圖像描述

更新:

如果要更新 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”。

更新 2:

如果要更新現有版本。 需要調用更新發布環境 rest api

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

首先,您需要將管道變量storageName scope 設置為其階段。 見下文:

在此處輸入圖像描述

然后更新請求正文中的storageName值。 並將status設置為inProgress以重新部署該階段。 這樣覆蓋的 storageName 將反映在發布中。

{
    "status": "inProgress",


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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM