将数据填充到 VSTS 发布摘要选项卡
Populate data in to VSTS release summary tab
我试图在不映射 TFS/VSTS 中的现有构建的情况下创建一个版本,并在完成后在版本摘要中显示数据。以下为纯文本步骤
- 发布 -> 清空发布定义 -> 添加构建任务 -> 创建发布 -> 部署 -> 在摘要部分查看数据
摘要数据 view-able 符合预期,在以下两种情况下没有任何问题
- 构建->创建构建定义->添加任务->保存并排队构建-构建成功->查看摘要数据
- 发布 -> 空发布定义 -> Link pre-defined 构建定义 -> 创建发布 -> 成功提供 运行 构建版本 -> 查看摘要数据。
根据我们的理解,当我们检索给定版本的工件时会出现问题。我们可以检索构建的结果,但无法对发布执行相同的操作。下面是我们用来读取发布数据的示例代码。如果您能为我们提供有关检索给定版本的工件详细信息的指导,那将非常有帮助。现在我们在客户端使用以下代码来检索发布工件,但它抱怨 release.artifacts 未定义。我们已验证附件文件已保存到给定的文件位置。
var c = VSS.getConfiguration();
c.onReleaseChanged(function (release) {
release.artifacts.forEach(function (art) {
var buildid = art.definitionReference.version.id;
// rest of the code is removed here
});
});
以下是我们寻找解决方案所遵循的参考资料,
我找到了这个问题的答案。特此分享给大家参考
如果我们不 link 工件(构建定义),那么 release/release 定义的工件将不会填充数据,因此我们将无法引用作为构建的一部分上传的附件。
因此,根据当前 API 实施,以下是实现此要求的步骤。
- 在扩展 运行 作为构建任务时将数据写入日志
- 构建完成后读取以上数据(在客户端)
- 在发布选项卡中显示检索到的(如果需要则处理)数据。
我发现下面的代码解释了从日志中检索数据(参考: https://github.com/Dynatrace/Dynatrace-AppMon-TFS-Integration-Plugin/blob/master/src/enhancer/dynatrace-testautomation.ts)
public initialize(): void {
super.initialize();
// Get configuration that's shared between extension and the extension host
var sharedConfig: TFS_Release_Extension_Contracts.IReleaseViewExtensionConfig = VSS.getConfiguration();
if(sharedConfig) {
// register your extension with host through callback
sharedConfig.onReleaseChanged((release: TFS_Release_Contracts.Release) => {
// get the dynatraceTestRun attachment from the build
var rmClient = RM_Client.getClient();
var LOOKFOR_TASK = "Collect Dynatrace Testrun Results";
var LOOKFOR_TESTRUNDATA = "\"testRunData\":";
var drcScope = this;
release.environments.forEach(function (env) {
var _env = env;
//project: string, releaseId: number, environmentId: number, taskId: number
rmClient.getTasks(VSS.getWebContext().project.id, release.id, env.id).then(function(tasks){
tasks.forEach(function(task){
if (task.name == LOOKFOR_TASK){
rmClient.getLog(VSS.getWebContext().project.id, release.id, env.id, task.id).then(function(log){
var iTRD = log.indexOf(LOOKFOR_TESTRUNDATA);
if (iTRD > 0){
var testRunData = JSON.parse(log.substring(iTRD + LOOKFOR_TESTRUNDATA.length, log.indexOf('}',iTRD)+1));
drcScope.displayDynatraceTestRunData.bind(drcScope);
drcScope.displayDynatraceTestRunData(_env.name, testRunData);
}
});
}
});
});
});
});
sharedConfig.onViewDisplayed(() => {
VSS.resize();
});
}
我试图在不映射 TFS/VSTS 中的现有构建的情况下创建一个版本,并在完成后在版本摘要中显示数据。以下为纯文本步骤
- 发布 -> 清空发布定义 -> 添加构建任务 -> 创建发布 -> 部署 -> 在摘要部分查看数据
摘要数据 view-able 符合预期,在以下两种情况下没有任何问题
- 构建->创建构建定义->添加任务->保存并排队构建-构建成功->查看摘要数据
- 发布 -> 空发布定义 -> Link pre-defined 构建定义 -> 创建发布 -> 成功提供 运行 构建版本 -> 查看摘要数据。
根据我们的理解,当我们检索给定版本的工件时会出现问题。我们可以检索构建的结果,但无法对发布执行相同的操作。下面是我们用来读取发布数据的示例代码。如果您能为我们提供有关检索给定版本的工件详细信息的指导,那将非常有帮助。现在我们在客户端使用以下代码来检索发布工件,但它抱怨 release.artifacts 未定义。我们已验证附件文件已保存到给定的文件位置。
var c = VSS.getConfiguration();
c.onReleaseChanged(function (release) {
release.artifacts.forEach(function (art) {
var buildid = art.definitionReference.version.id;
// rest of the code is removed here
});
});
以下是我们寻找解决方案所遵循的参考资料,
我找到了这个问题的答案。特此分享给大家参考
如果我们不 link 工件(构建定义),那么 release/release 定义的工件将不会填充数据,因此我们将无法引用作为构建的一部分上传的附件。
因此,根据当前 API 实施,以下是实现此要求的步骤。
- 在扩展 运行 作为构建任务时将数据写入日志
- 构建完成后读取以上数据(在客户端)
- 在发布选项卡中显示检索到的(如果需要则处理)数据。
我发现下面的代码解释了从日志中检索数据(参考: https://github.com/Dynatrace/Dynatrace-AppMon-TFS-Integration-Plugin/blob/master/src/enhancer/dynatrace-testautomation.ts)
public initialize(): void {
super.initialize();
// Get configuration that's shared between extension and the extension host
var sharedConfig: TFS_Release_Extension_Contracts.IReleaseViewExtensionConfig = VSS.getConfiguration();
if(sharedConfig) {
// register your extension with host through callback
sharedConfig.onReleaseChanged((release: TFS_Release_Contracts.Release) => {
// get the dynatraceTestRun attachment from the build
var rmClient = RM_Client.getClient();
var LOOKFOR_TASK = "Collect Dynatrace Testrun Results";
var LOOKFOR_TESTRUNDATA = "\"testRunData\":";
var drcScope = this;
release.environments.forEach(function (env) {
var _env = env;
//project: string, releaseId: number, environmentId: number, taskId: number
rmClient.getTasks(VSS.getWebContext().project.id, release.id, env.id).then(function(tasks){
tasks.forEach(function(task){
if (task.name == LOOKFOR_TASK){
rmClient.getLog(VSS.getWebContext().project.id, release.id, env.id, task.id).then(function(log){
var iTRD = log.indexOf(LOOKFOR_TESTRUNDATA);
if (iTRD > 0){
var testRunData = JSON.parse(log.substring(iTRD + LOOKFOR_TESTRUNDATA.length, log.indexOf('}',iTRD)+1));
drcScope.displayDynatraceTestRunData.bind(drcScope);
drcScope.displayDynatraceTestRunData(_env.name, testRunData);
}
});
}
});
});
});
});
sharedConfig.onViewDisplayed(() => {
VSS.resize();
});
}