【发布时间】: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