【发布时间】:2020-09-15 17:50:07
【问题描述】:
我们有 Azure DevOps 扩展,其中一项构建任务用于从发布构建日志中获取数据以显示在发布摘要选项卡中。 此构建任务非常适合单个代理作业管道,但我们遇到了一个场景,即有多个代理作业可用,一旦我们的构建任务添加到第二个或以后的代理作业,我们就无法检索数据。
以下是我们如何从任务日志中获取数据。但是,此方法仅遍历第一个作业,而不会访问第二个作业。 我们正在使用 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, release.id, environment.id, currentTask.id, environment.deploySteps.length);
// Identify task based on data in it
break;
}
根据 SDK 实现,有两种方法可用于检索日志
/**
* [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>;
如您所见,在这些方法中没有指定代理作业的地方。
如果有人有这方面的经验,
- 是否可以从发布管道中的第二个或以后的作业获取日志数据?示例/文档会很有帮助。
- 我尝试从数组缓冲区中获取数据,但是当我尝试将 ArrayBuffer 转换为字符串时,它最终超出了边界错误。
任何想法,建议高度赞赏????
【问题讨论】:
-
你查看我的回复了吗?有用吗?
-
会解决这个问题并尽快回复您。谢谢。
-
期待您的更新。
标签: azure-devops azure-devops-rest-api azure-devops-extensions vssdk