2016-08-19 1 views
2

Мне нужно отобразить результат пользовательской задачи сборки на сводной вкладке («ms.vss-build-web.build-results-section») , Для этого мне нужно сохранить некоторые данные из задачи сборки и использовать ее для вызова веб-службы из раздела резюме. Возможно ли хранить данные в переменной с помощью службы внутренних данных и использовать ее на странице сводной страницы? Какой должен быть лучший подход для этого?VSTS Extension - сохранение параметров из задачи построения и вызов веб-службы из итоговой вкладки

Заранее спасибо.

+0

Не могли бы вы назвать веб-сервис, когда сборка завершена? Основываясь на этом примере https://github.com/Microsoft/vsts-extension-samples/tree/master/build-results-enhancer, он обновляет изображение при завершении сборки. –

+0

Мне нужно передать некоторые данные на итоговую страницу, я планирую использовать VSS Extension Data Service для этого. 1.) Ill Сохранить результат из задачи сборки в качестве параметра в службе данных расширения. 2.) Я прочитал настройку из службы данных расширений на странице загрузки резюме и привязал эти значения к html. Я предполагаю, что это правильно. Thanks- – Bandara

ответ

1

Я приложил мои данные сборки задачи с помощью ведения журнала команд

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 { \t 
 
\t constructor() { 
 
\t \t super(); 
 
\t } 
 
\t \t 
 
\t public initialize(): void { 
 
\t \t super.initialize(); 
 

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

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

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

 
\t \t \t \t \t }); \t \t \t \t \t 
 
\t \t \t \t } 
 
\t \t \t \t }); \t 
 
\t \t \t }); 
 
\t \t } \t \t 
 
\t } \t 
 
} 
 

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

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

+0

Чувак! Я не могу утверждать, что MS не написала «getAttachmentContent» в своих учебниках, я работал 2 дня, чтобы решить, как получить эти данные. Спасибо !!! –

0

Вы можете это сделать, но проблема в том, что эти значения всегда являются значениями из последней сборки, информация на сводной странице будет неправильной для старых сборников. Поэтому я бы рекомендовал получить результат задания сборки через BuildHttpClient2_2, а затем сразу показать его на сводной странице.

+0

Hi Eddie, Мое расширение извлекает артефакты сборки и загружает их в веб-службу. Веб-служба принимает эти артефакты и возвращает некоторую информацию (сводку в формате xml), которую мне нужно отобразить в сводном разделе. (Я предполагаю, что вам нужно хранить данные xml и загружать в итоговую html-страницу.) Но я не конечно, как это сделать. Как вы объяснили, пользователь может просмотреть предыдущие сборки, и он должен увидеть соответствующее резюме результата. Я проанализировал образцы из Microsoft, но у них нет похожих образцов для моего проблемного сценария. Можете ли вы указать мне на любые образцы или документацию, которые помогут мне решить эту проблему? – Bandara

+0

@BandR Вы видели это раньше: https://www.visualstudio.com/en-us/docs/integrate/extensions/develop/data-storage? –

+0

@ Edddie, Yes Eddie Я рассмотрел этот вариант, проблема в том, что если я использую службу данных расширения, мне нужно вручную управлять этими документами, созданными в хранилище данных. Я ищу самый простой способ сделать это, избегая службы данных ext :). Я заметил, что объект TFS_Build_Contracts.Build содержит информацию, связанную с сборкой. Есть ли способ сохранить мой вывод задачи (xml, который я упомянул) как объект где-то внутри договора сборки, чтобы я мог получить его из итоговой страницы? или любой другой лучший вариант? – Bandara

Смежные вопросы