VSTS扩展 - 从构建任务存储参数并从摘要选项卡调用Web服务

时间:2016-08-19 04:54:48

标签: tfs azure-devops tfsbuild

我需要在摘要选项卡(“ms.vss-build-web.build-results-section”)中显示自定义构建任务的结果。为了做到这一点,我需要保留构建任务中的一些数据,并使用它从摘要部分调用Web服务。是否可以使用Extension Data Service将数据存储在变量中并在摘要页面中使用它?对此最好的方法是什么?

提前致谢。

2 个答案:

答案 0 :(得分:3)

我使用Logging命令附加了我的构建任务数据

https://github.com/Microsoft/vsts-tasks/blob/986f8f5112017474962affe58c9ebaf394fb9354/docs/authoring/commands.md



//Build Task

class TestClass {
    _name: string;
    _age: number;

    constructor(name: string, age:number) {
        this._name = name;
        this._age = age;
    }
}

var data = new TestClass(TinTin,100);

//Create a folder
tl.mkdirP("c:/myfolder/");

//Write data to a file
tl.writeFile("c:/myfolder/mydata.txt",JSON.stringify(data));

//Executes command to attach the file to build
console.log("##vso[task.addattachment type=myAttachmentType;name=myAttachmentName;]c:/myfolder/mydata.txt");




从摘要页面检索附件。

https://github.com/Microsoft/vsts-extension-samples/blob/master/build-results-enhancer/src/enhancer/tab.ts



//Summary Page

/// <reference path="../definitions/Q.d.ts" />
/// <reference path="../definitions/vss.d.ts" />
/// <reference path="../definitions/tfs.d.ts" />
/// <reference path="../definitions/jquery.d.ts" />

import VSS_Service = require("VSS/Service");
import Controls = require("VSS/Controls");
import TFS_Build_Contracts = require("TFS/Build/Contracts");
import TFS_Build_Extension_Contracts = require("TFS/Build/ExtensionContracts");
import DT_Client = require("TFS/DistributedTask/TaskRestClient");

export class StatusSection extends Controls.BaseControl {	
	constructor() {
		super();
	}
		
	public initialize(): void {
		super.initialize();

		// Get configuration that's shared between extension and the extension host
		var sharedConfig: TFS_Build_Extension_Contracts.IBuildResultsViewExtensionConfig = VSS.getConfiguration();
		var vsoContext = VSS.getWebContext();
		
		if(sharedConfig) {
			// register your extension with host through callback
			sharedConfig.onBuildChanged((build: TFS_Build_Contracts.Build) => {

				var taskClient = DT_Client.getClient();
				taskClient.getPlanAttachments(vsoContext.project.id, "build", build.orchestrationPlan.planId, "myAttachmentType").then((taskAttachments)=> {
											
				if (taskAttachments.length === 1) {
					var recId = taskAttachments[0].recordId;
					var timelineId = taskAttachments[0].timelineId;

					taskClient.getAttachmentContent(vsoContext.project.id, "build", build.orchestrationPlan.planId,timelineId,recId,"myAttachmentType","myAttachmentName").then((attachementContent)=> {														
						function arrayBufferToString(buffer){
									var arr = new Uint8Array(buffer);
									var str = String.fromCharCode.apply(String, arr);
									if(/[\u0080-\uffff]/.test(str)){
										throw new Error("this string seems to contain (still encoded) multibytes");
									}
									return str;
								}
						
						var summaryPageData = arrayBufferToString(attachementContent);
						
						//Deserialize data
						var ob = JSON.parse(summaryPageData);
						console.log("Name: " + ob._name);
						console.log("Age: " + ob._age);

					});					
				}
				});	
			});
		}		
	}	
}

StatusSection.enhance(StatusSection, $(".build-status"), {});

// Notify the parent frame that the host has been loaded
VSS.notifyLoadSucceeded();
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以这样做,但问题是这些值始终是最新版本的值,摘要页面中的信息对于旧版本不正确。所以我建议通过BuildHttpClient2_2获取构建任务结果,然后直接在摘要页面中显示。