[英]Obtain all work items from Azure DevOps that have been merged into a branch via JavaScript
我目前正在使用 NodeJS 开发一个“发行说明”应用程序,该应用程序调用各种 Azure DevOps REST API 端点以根据特定标签获取工作项。
我现在所拥有的是这样工作的;
v1.1
。v1.1
标记匹配的所有工作项。/**
* Function used to fetch initial work items from Azure DevOps that match the provided release number
* @param {String} releaseNumber - the given release number
* @returns {Array} workItems - the initial work items fetched from Azure DevOps
*/
async function fetchWorkItems(releaseNumber) {
console.log('\nFetching work items for given release number...');
let response;
try {
response = await axios.post('https://dev.azure.com/myTestOrg/myTestProject/_apis/wit/wiql?api-version=6', {
query: `SELECT [State], [Title] FROM WorkItems WHERE [Tags] CONTAINS '${releaseNumber}'`
}, {
headers: {
Authorization: getAuthToken()
}
});
console.log(`Found ${response.data.workItems.length} work item(s).`);
} catch (e) {
console.error('\nUnable to fetch work items. See below error message');
console.error(e.message);
process.exit(1);
}
return response.data.workItems;
}
/**
* Function used to fetch the details for a given array of work items
* @param {Array} givenWorkItems - given array of work items to fetch the details for
* @returns {Array} details - the initial work items fetched from Azure DevOps
*/
async function fetchWorkItemDetails(givenWorkItems) {
console.log('\nFetching further details for the given work item(s)...');
const returnData = [];
let response;
for (const item of givenWorkItems) {
try {
// eslint-disable-next-line no-await-in-loop
response = await axios.get(item.url, {
headers: {
Authorization: getAuthToken()
}
});
} catch (e) {
console.error('\nUnable to fetch details for given work items. See below error message');
console.error(e.message);
process.exit(1);
} finally {
returnData.push({
type: response.data.fields['System.WorkItemType'],
title: response.data.fields['System.Title'],
url: response.data._links.html.href
});
}
}
console.log(`Found details for ${returnData.length} work item(s).`);
return returnData;
}
...
/**
* Function used to create the wiki entry based on a given markup string
* @param {String} releaseNumber - the given release number
* @param {String} givenMarkdown - given array of work items to fetch the details for
* @returns {undefined} nothing
*/
async function createWiki(releaseNumber, givenMarkdown) {
console.log('\nCreating wiki entry...');
try {
await axios.put(`https://dev.azure.com/myTestOrg/myTestProject/_apis/wiki/wikis/myTestProject.wiki/pages?path=/Releases/Release%20${releaseNumber}&api-version=6.0`, {
content: givenMarkdown
}, {
headers: {
Authorization: getAuthToken()
}
});
} catch (e) {
console.error('\nUnable to create wiki entry for given markdown. See below error message');
console.error(e.message);
process.exit(1);
} finally {
console.log('Successfully created wiki entry.');
}
}
...
const workItems = await fetchWorkItems(releaseNumber);
const workItemDetails = await fetchWorkItemDetails(workItems);
const formattedDetails = formatWorkItemDetails(workItemDetails);
const generatedMarkup = generateMarkdown(formattedDetails);
await createWiki(releaseNumber, generatedMarkup);
...
// creates the wiki based on the given `releaseNumber` variable
// (which is the workitem tag of `v1.1` in our case)
如果我记得用正确的v1.1
标签标记工作项,这个应用程序就可以正常工作——但如果我不这样做,这个程序将不会发现特定票证(和关联的分支/代码)已被合并到并且已经/正在等待发布 - 我希望这是有道理的?
有没有办法让我通过 REST api 获取已合并到分支(或 git 标签)的所有工作项(无论标签如何)?
我注意到还有一个azure-devops-node-api
npm package 可能合适,但我不知道我想要实现的目标是否可行。
我看到这个项目https://marketplace.visualstudio.com/items?itemName=richardfennellBM.BM-VSTS-XplatGenerateReleaseNotes当我尝试它时,它似乎工作正常但不适合我的需要;
release
部分,我只有几个应用程序管道,其中包含用于将各种应用程序部署到 QA/暂存/生产环境的门控步骤注意:我不会写how to do it java脚本因为我不是js专家...思路是rest api,所以语言无所谓。
获取所有要检查的工作项,你可以用你现在的api来完成,只需在查询中删除Tags。 (您可以通过指定日期等缩小结果范围)
您还需要获取链接到工作项的 PR, WIQL api不提供此数据,因此 - 在您获得工作项 ID 后,您需要调用工作项 - 获取工作项批次api(或循环每个和执行Work Items - Get Work Item api) 并在 body/url 中添加$expand
和relations/all
值以获取链接的 PR。
在您拥有与其链接的 PR 的工作项之后(在上面的 api 响应中,您将看到relations
部分,如果在其中url
与vstfs:///Git/PullRequestId
所以它是 PR),您需要检查 PR 是否已合并到master
分支。 如何? 使用Pull Requests - Get Pull Request api,现在,检查此 PR 的目标分支并检查是否已完成(合并)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.