从 TypeScript 扩展中的 Azure DevOps 发布部署中检索任务附件
Retrieve task attachment from an Azure DevOps release deployment in an TypeScript extension
我正在开发一个 Azure DevOps 扩展,其中包含一个添加附件的自定义任务。它可以在构建或发布管道中使用。
使用 npm 包 vss-web-extension-sdk
和 TypeScript,如何为特定 Release Pipeline 部署、特定环境和特定部署检索此附件的内容尝试?
最终目标是将附件内容(HTML)注入到 iframe 中,在发布的选项卡内容中。
这就是我卡住的地方:
import Controls = require("VSS/Controls");
import TFS_Build_Contracts = require("TFS/Build/Contracts");
import TFS_Build_Extension_Contracts = require("TFS/Build/ExtensionContracts");
import TFS_DistributedTask_Contracts = require("TFS/DistributedTask/Contracts");
import TFS_Release_Extension_Contracts = require("ReleaseManagement/Core/ExtensionContracts");
import TFS_Release_Contracts = require("ReleaseManagement/Core/Contracts");
import DT_Client = require("TFS/DistributedTask/TaskRestClient");
import RM_Client = require("ReleaseManagement/Core/RestClient");
// [...]
private async searchForAttachment(release: TFS_Release_Contracts.Release) {
let vsoContext: WebContext = VSS.getWebContext();
let rmClient = <RM_Client.ReleaseHttpClient5>RM_Client.getClient();
let projectId = vsoContext.project.id;
// For test purpose, target the last environment and last deployment attempt
let env = release.environments[release.environments.length - 1];
let attempt = env.deploySteps[env.deploySteps.length - 1];
// Where I am supposed to retrieve "timelineId" ?
let attachments = rmClient.getTaskAttachments(
projectId, release.id, env.id, attempt.id, timelineId, 'my_attachment_type'
);
// The documentation says that the call above is deprecated, and I should use getReleaseTaskAttachments
// But, where I am supposed to retrieve "planId" ?
// Also, getReleaseTaskAttachments is undefined in the latest version of the npm package...
attachments = rmClient.getReleaseTaskAttachments(
projectId, release.id, env.id, attempt.id, planId, 'my_attachment_type'
);
}
仅供参考,我已经能够从构建管道中检索附件,但它不适用于发布部署。它更简单,我在网上找到了足够的文档。
此外,我正在使用 task.addattachment
命令在自定义任务中添加附件:
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt
在配置发布定义时,您添加到工作流中的每个作业都会在发布触发时映射到 plan/planId。例如。当我根据工作流如下所示的定义对发布进行排队时,部署步骤对象 (env.deploySteps[env.deploySteps.length - 1]
) 将包含两个发布部署阶段。
两个作业的计划 ID 可以检索为 -
env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[0].runPlanId
env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[1].runPlanId
作业中运行的每个任务(在本例中为 Bash 脚本)将创建用于检索日志和附件的时间线。 我将执行此操作以获取 BashScript、
的时间线 ID
env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[0].deploymentJobs[0].tasks[0].timelineRecordId
层次结构有点复杂,因为一个部署步骤可以包含 N(>1) 个阶段。每个阶段都可以包含多个作业(通常是部署组和乘法器的情况,如果您不使用它们,则直接回退到 deploymentJobs[0])。在每个作业中,都有您在工作流中配置的多个任务,每个任务都创建了自己的时间线。
我正在开发一个 Azure DevOps 扩展,其中包含一个添加附件的自定义任务。它可以在构建或发布管道中使用。
使用 npm 包 vss-web-extension-sdk
和 TypeScript,如何为特定 Release Pipeline 部署、特定环境和特定部署检索此附件的内容尝试?
最终目标是将附件内容(HTML)注入到 iframe 中,在发布的选项卡内容中。
这就是我卡住的地方:
import Controls = require("VSS/Controls");
import TFS_Build_Contracts = require("TFS/Build/Contracts");
import TFS_Build_Extension_Contracts = require("TFS/Build/ExtensionContracts");
import TFS_DistributedTask_Contracts = require("TFS/DistributedTask/Contracts");
import TFS_Release_Extension_Contracts = require("ReleaseManagement/Core/ExtensionContracts");
import TFS_Release_Contracts = require("ReleaseManagement/Core/Contracts");
import DT_Client = require("TFS/DistributedTask/TaskRestClient");
import RM_Client = require("ReleaseManagement/Core/RestClient");
// [...]
private async searchForAttachment(release: TFS_Release_Contracts.Release) {
let vsoContext: WebContext = VSS.getWebContext();
let rmClient = <RM_Client.ReleaseHttpClient5>RM_Client.getClient();
let projectId = vsoContext.project.id;
// For test purpose, target the last environment and last deployment attempt
let env = release.environments[release.environments.length - 1];
let attempt = env.deploySteps[env.deploySteps.length - 1];
// Where I am supposed to retrieve "timelineId" ?
let attachments = rmClient.getTaskAttachments(
projectId, release.id, env.id, attempt.id, timelineId, 'my_attachment_type'
);
// The documentation says that the call above is deprecated, and I should use getReleaseTaskAttachments
// But, where I am supposed to retrieve "planId" ?
// Also, getReleaseTaskAttachments is undefined in the latest version of the npm package...
attachments = rmClient.getReleaseTaskAttachments(
projectId, release.id, env.id, attempt.id, planId, 'my_attachment_type'
);
}
仅供参考,我已经能够从构建管道中检索附件,但它不适用于发布部署。它更简单,我在网上找到了足够的文档。
此外,我正在使用 task.addattachment
命令在自定义任务中添加附件:
##vso[task.addattachment type=myattachmenttype;name=myattachmentname;]c:\myattachment.txt
在配置发布定义时,您添加到工作流中的每个作业都会在发布触发时映射到 plan/planId。例如。当我根据工作流如下所示的定义对发布进行排队时,部署步骤对象 (env.deploySteps[env.deploySteps.length - 1]
) 将包含两个发布部署阶段。
两个作业的计划 ID 可以检索为 -
env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[0].runPlanId
env.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[1].runPlanId
作业中运行的每个任务(在本例中为 Bash 脚本)将创建用于检索日志和附件的时间线。 我将执行此操作以获取 BashScript、
的时间线 IDenv.deploySteps[env.deploySteps.length - 1].releaseDeployPhases[0].deploymentJobs[0].tasks[0].timelineRecordId
层次结构有点复杂,因为一个部署步骤可以包含 N(>1) 个阶段。每个阶段都可以包含多个作业(通常是部署组和乘法器的情况,如果您不使用它们,则直接回退到 deploymentJobs[0])。在每个作业中,都有您在工作流中配置的多个任务,每个任务都创建了自己的时间线。