Atlassian Bamboo集成

Atlassian Bamboo是一个用于构建、测试和发布软件的持续集成服务器。Coco插件提供了与Bamboo的无缝集成。用户可以在Bamboo工作项中添加一个或多个Coco任务。每个Coco任务可以执行以下操作

  1. 将执行报告导入到运行时指标数据库中。
  2. 合并多个运行时指标数据库。
  3. 生成代码覆盖率报告。

用户可以选择执行以下一个、两个或所有三个操作。如果选择多个操作,它们将按上述顺序执行。

Coco任务配置概述

操作完成后,由Coco(如覆盖率报告)生成的文件可以保存,以便进行有效的故障排除。

代理配置

一个代理是一个运行Bamboo构建、测试和部署的服务。在Agent Capabilities设置中,用户可以指定哪些代理有资格运行Coco工作项。为了执行它,我们首先必须在代理主机上安装Coco。然后我们需要在配置项Bamboo管理 > 构建资源 > 代理 > 代理名称 > 代理特定能力中设置一个名为coco的能力值,并将Coco安装目录作为此配置条目中的值。

稍后,在任务配置期间,我们需要设置是否存在一个coco能力,作为工作项的要求。这样,只有在安装了Coco的代理上才会执行Coco工作项。

导入执行报告

此操作调用cmcsexeimport将执行报告(.csexe文件)导入到运行时指标数据库(.csmes文件)。用户需要提供从Bamboo构建目录的绝对路径或相对路径(到.csexe.csmes文件),以及执行标题。

当此操作被激活时,以下命令将在代理主机上执行

cmcsexeimport --debug --title=<标题> -m <CSMesFile> -e <CSExeFile>

合并运行时指标数据库

此操作调用 cmmerge 来合并多个仪器数据库(.csmes 文件)。我们必须提供完整路径或相对路径到结果 .csmes 输出文件。如果我们提供相对路径(或仅文件名),则 .csmes 输出文件将相对 Bamboo 工作目录生成。需要指定 .csmes 输入文件。可以使用多个文件,用逗号分隔。

当此操作激活时,在代理主机上执行以下命令

cmmerge --verbose -o <CSMesOutputFile> <CSMesInputFile1> ... <CSMesInputFileN>

此外,用户可以选择选项 仅合并参考文件中存在的仪器和执行。此选项用于导入包含单元测试的 .csmes 文件。选择此选项时,用户必须提供 .csmes 参考文件。这将导致以附加选项 -i 执行 cmmerge 命令

cmmerge --verbose -o <CSMesOutputFile> -i <CSMesInputFile1> ... <CSMesInputFileN>

生成覆盖率报告

最后的操作通过运行 cmreport 来生成一个 HTML 报告。我们需要提供 .csmes 文件名(完整路径或相对路径)。必须包含先前导入的执行报告(即使用插件提供的第一个操作导入)的 .csmes 文件。

cmreport --title=<BambooJobName> -m <CSMesFile> --debug --html=coco/report.html

生成的报告将存储在 coco 子目录中,因此我们可以将 coco/** 作为复制模式定义工件。这使得我们可以在作业执行后在 Bamboo 中直接查看报告。报告标题使用 Bamboo 作业名称构建。

示例

单个执行的覆盖率报告

首先,我们需要激活操作 将执行报告导入仪器数据库 以将执行报告(.csexe 文件)导入仪器数据库(.csmes 文件)。最后,我们需要激活第三个操作,生成代码覆盖率报告。此操作的 .csexe 文件与第一个操作相同。

示例地址簿应用程序的 Coco 作业配置

单元测试的覆盖率报告

在这个场景中,我们希望为单元测试执行生成覆盖率报告。要在 Bamboo 中实现此目标,我们需要一个由两个 Coco 作业组成的作业。

在测试程序的构建之后,我们有两个 .csmes 文件:一个用于应用程序,另一个用于单元测试。我们需要合并这些仪器数据库,其中包含应用程序的 .csmes 文件作为合并期间的参考。合并步骤创建一个新的 .csmes 文件作为其输出文件。这是在以下任务中完成的

合并单元测试执行的 Coco 作业配置

在第二个任务中,将单元测试的执行报告导入 .csmes 文件(这是前一个任务的 .csmes 输出文件)。该任务的最后一个操作 生成代码覆盖率报告 生成 HTML 报告。

导入执行和生成报告的 Coco 作业配置

Coco v7.2.0©2024 Qt 公司有限公司。
Qt和相应的标志是芬兰Qt公司以及在全世界其他国家的注册商标。所有其他商标均属于其各自的产权人。