如何解决在Azure DevOps版本的多作业管道中检索特定生成任务的日志文件
我们有Azure DevOps扩展,其中我们用来从发布生成日志中获取数据的构建任务之一显示在发布摘要选项卡中。 这个构建任务非常适合单个Agent Job管道,但是我们遇到了一个场景,即有多个Agent任务可用,并且一旦将构建任务添加到第二个或更高版本的Agent任务中,我们就无法检索数据。
下面是我们如何从任务日志中获取数据。但是,此方法仅迭代第一项工作,而不会访问第二项。 我们正在使用VSS SDK中“ ReleaseManagement / Core / RestClient”中的发布管理客户端
//getting list of tasks
var t = await rmClient.getTasks(VSS.getWebContext().project.id,release.id,environment.id);
// iterate trough task list until required task found
for (var i = 0; i < t.length; i++) {
var currentTask = t[i];
var logData = await rmClient.getLog(VSS.getWebContext().project.id,environment.id,currentTask.id,environment.deploySteps.length);
// Identify task based on data in it
break;
}
根据SDK的实现,有两种方法可用于检索日志getlog,getlog以字符串形式返回任务日志(我们现在使用的一种),而getLogs以ArrayBuffer形式返回所有日志
/**
* [Preview API] Gets logs
*
* @param {string} project - Project ID or project name
* @param {number} releaseId - Id of the release.
* @param {number} environmentId - Id of release environment.
* @param {number} taskId - ReleaseTask Id for the log.
* @param {number} attemptId - Id of the attempt.
* @return IPromise<string>
*/
getLog(project: string,releaseId: number,environmentId: number,taskId: number,attemptId?: number): IPromise<string>;
/**
* [Preview API] Get logs for a release Id.
*
* @param {string} project - Project ID or project name
* @param {number} releaseId - Id of the release.
* @return IPromise<ArrayBuffer>
*/
getLogs(project: string,releaseId: number): IPromise<ArrayBuffer>;
如果有人对此有经验,
任何想法,请高度赞赏?
解决方法
要从“代理作业”获取任务日志,您还需要releaseDeployPhaseId
。检查以下api:
GET https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}/environments/{environmentId}/deployPhases/{releaseDeployPhaseId}/tasks/{taskId}/logs?api-version=6.0-preview.2
如本文档所述,您可以从扩展程序中调用REST API:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。