我正在开发Azure DevOps扩展,该扩展包括添加附件的自定义任务。它可以在Build或Release管道中使用。
使用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
答案 0 :(得分:0)
在配置发布定义时,发布触发时,添加到工作流程中的每个作业都会映射到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
由于deployStep可以包含N(> 1)个阶段,因此层次结构有点复杂。每个阶段都可以包含多个作业(对于部署组和乘数,通常是这种情况,如果您不使用它们,则只是退回到DeploymentJobs [0])。在每个作业中,您在工作流程中配置了多个任务,每个任务创建自己的时间表。