Tfs 在VSTS发布摘要选项卡中填充数据

Tfs 在VSTS发布摘要选项卡中填充数据,tfs,azure-devops,azure-pipelines,azure-pipelines-release-pipeline,azure-devops-rest-api,Tfs,Azure Devops,Azure Pipelines,Azure Pipelines Release Pipeline,Azure Devops Rest Api,我试图创建一个版本,而不映射TFS/VST中的现有构建,并在完成后在版本摘要中显示数据。在纯文本中,步骤如下 发布->空发布定义->添加构建任务->创建发布->部署->在摘要部分查看数据 在以下两种情况下,可以按预期查看摘要数据,而不会出现任何问题 生成->创建生成定义->添加任务->保存并排队生成–生成成功->查看摘要数据 发布->空发布定义->链接预定义生成定义->创建发布->提供成功运行的生成版本->查看摘要数据 根据我们的理解,当我们检索给定版本的工件时会出现问题。我们可以检索构建

我试图创建一个版本,而不映射TFS/VST中的现有构建,并在完成后在版本摘要中显示数据。在纯文本中,步骤如下

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

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

  • 生成->创建生成定义->添加任务->保存并排队生成–生成成功->查看摘要数据
  • 发布->空发布定义->链接预定义生成定义->创建发布->提供成功运行的生成版本->查看摘要数据
  • 根据我们的理解,当我们检索给定版本的工件时会出现问题。我们可以检索构建的结果,但无法检索发布的结果。下面是我们用来读取发布数据的示例代码。如果您能为我们提供有关检索给定版本的工件详细信息的指导,这将非常有用。现在,我们在客户端使用以下代码来检索发布工件,但它会抱怨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
    
             });
    });
    
    以下是我们为找到解决方案而遵循的参考资料


      • 我找到了这个问题的答案。我在此分享同样的内容供其他人参考

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

        因此,根据当前的API实现,以下是实现此要求所需遵循的步骤

        • 在扩展作为生成任务运行时将数据写入日志
        • 构建完成后读取上述数据(在客户端)
        • 在“发布”选项卡中显示检索到的(如果需要已处理)数据
        我发现下面的代码解释了如何从日志中检索数据(参考:


        我找到了这个问题的答案。我在此分享同样的内容供其他人参考

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

        因此,根据当前的API实现,以下是实现此要求所需遵循的步骤

        • 在扩展作为生成任务运行时将数据写入日志
        • 构建完成后读取上述数据(在客户端)
        • 在“发布”选项卡中显示检索到的(如果需要已处理)数据
        我发现下面的代码解释了如何从日志中检索数据(参考:


        既然您没有将构建工件链接到发布,那么您想要检索哪些数据?您好@starain MSFT,非常感谢您的回复。我们正在将扩展添加为一个任务,以便在版本中的一个环境中执行时运行。此任务将在执行发布时附加文件。我们需要在该文件完成执行后检索该文件中的数据。是否使用getPlanAttachements()方法进行尝试?您好@starain MSFT我找不到任何方法来获取发布的planId=releaseData.environments[0]。deploySteps[0]。runPlanId;给我的guid似乎不正确。在taskClient.getPlanAttachments(vsoContext.project.Id,“release”,planid,“abc”)中使用上述计划Id时出错@Lalindu在执行过程中如何附加文件?调用“##vso[task.uploadfile]local file path”命令?由于您没有将构建工件链接到发布,您要检索哪些数据?您好@starain MSFT,非常感谢您的回复。我们正在将扩展添加为一个任务,以便在版本中的一个环境中执行时运行。此任务将在执行发布时附加文件。我们需要在该文件完成执行后检索该文件中的数据。是否使用getPlanAttachements()方法进行尝试?您好@starain MSFT我找不到任何方法来获取发布的planId=releaseData.environments[0]。deploySteps[0]。runPlanId;给我的guid似乎不正确。在taskClient.getPlanAttachments(vsoContext.project.Id,“release”,planid,“abc”)中使用上述计划Id时出错@Lalindu在执行过程中如何附加文件?调用“##vso[task.uploadfile]local file path”命令?
        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();
                    });
        
                }