自定义 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"
}
}
}
我正在使用 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"
}
}
}