【问题标题】:Retrieve task attachment from an Azure DevOps release deployment in an TypeScript extension从 TypeScript 扩展中的 Azure DevOps 发布部署中检索任务附件
【发布时间】:2018-11-06 14:19:47
【问题描述】:

我正在开发一个 Azure DevOps 扩展,其中包含一个添加附件的自定义任务。它可以在构建或发布管道中使用。

使用 npm 包 vss-web-extension-sdk 和 TypeScript,我如何为特定的发布管道部署、特定环境和特定部署尝试检索此附件的内容?

最终目标是将附件内容(即 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

【问题讨论】:

    标签: typescript azure-devops azure-pipelines azure-pipelines-release-pipeline


    【解决方案1】:

    在配置发布定义时,您添加到工作流的每个作业都会在发布触发时映射到一个计划/计划 ID。例如。当我在工作流如下所示的定义中排队发布时,部署步骤对象 (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
    

    层次结构有点复杂,因为 deployStep 可以包含 N(>1) 个阶段。每个阶段可以包含多个作业(通常使用部署组和乘数,如果您不使用它们,则回退到 deploymentJobs[0])。在每个作业中,您在工作流中配置了多个任务,每个任务都创建了自己的时间线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-05
      • 2019-09-28
      • 2022-12-05
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      • 2020-07-04
      相关资源
      最近更新 更多