将数据填充到VSTS版本摘要选项卡

时间:2017-06-09 07:07:48

标签: tfs azure-devops azure-pipelines azure-pipelines-release-pipeline azure-devops-rest-api

我正在尝试创建一个版本而不在TFS / VSTS中映射现有版本,并在完成后在发布摘要中显示数据。在纯文本步骤中遵循

  • 发布 - >空发布定义 - >添加构建任务 - >创建发布 - >部署 - >查看摘要部分中的数据

Release Summary Section

摘要数据可按预期查看,而不会出现以下两种情况的任何问题

  1. 构建 - >创建构建定义 - >添加任务 - >保存和队列构建 - 构建成功 - >查看摘要数据
  2. 发布 - >空发布定义 - >链接预定义的构建定义 - >创建发布 - >提供成功运行的构建版本 - >查看摘要数据。
  3. 根据我们的理解,当我们检索给定版本的工件时会出现问题。我们可以检索构建的结果,但是对于版本不能执行相同的操作。下面是我们用于读取发布数据的示例代码。如果您可以为我们提供有关检索给定版本的工件详细信息的指导,将会非常有用。现在我们在客户端使用以下代码来检索发布工件,但它抱怨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
    
             });
    });
    

    下面是我们查找解决方案的参考资料,

1 个答案:

答案 0 :(得分:0)

我能够找到这个问题的答案。我在此与他人分享同样的内容。

如果我们没有链接工件(构建定义),那么发布/发布定义的工件将不会被数据填充,因此我们将无法引用作为部分上传的附件构建。

因此,根据当前的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();
            });

        }