Bamboo集成

通过 CppDepend 与 Bamboo 集成提升开发效率

什么是Bamboo?

简而言之,Bamboo 是以下公司的构建服务器 Atlassian 到其 CI 技术栈中。它通常与 BitBucket 集成一起使用,也提供连接到任何其他存储库(包括 GitHub)的可能性。Bamboo 本身允许您创建构建项目、部署策略、与其他 Atlassian 工具的互连,甚至可以自动将构建状态消息发送到您的 #Slack 频道。如果您已经使用过 Jenkins、Bamboo 或 GitLab,您应该已经熟悉此类工具的日常使用。要获取有关 Bamboo 的更多详细信息, 请点击此链接,它提供了关于 Bamboo 的完整详细信息.

先决条件

  • Windows 上的 Bamboo Server(或 Agent)。如果您需要安装新实例 点击此处下载Bamboo.
    • 必须在名称不含任何空格的文件夹中使用或安装 JDK 1.8(JRE 似乎也可以)。任何高于 8 的版本都无法工作。预计将来会支持。
    • 如果您在本地运行测试服务器以查看其工作方式,可以通过 http://localhost:8085/ 访问
    • 在首次使用向导期间,需要密钥进行激活(30 天或正式许可证)。要获得 30 天许可证,请进入您的 Atlassian 空间或直接使​​用 此链接 以便为您的帐户申请评估许可证
  • 在构建机器上激活的 CppDepend DevOps 许可证或 CppDepend 试用版(如果您在本地运行 Bamboo,则为当前机器)
  • PowerShell 不是必需的,但您稍后会看到,如果您想要一个无故障的正常构建,它是必不可少的

回到顶部

Bamboo - 添加CppDepend能力

Bamboo中的能力是什么

在 Bamboo 中,为了能够使用任何与构建相关的工具,通常应该为每个代理设置以添加特定的能力(capability)。在本例中,我们将为 Windows 代理添加 CppDepend 能力。该能力将指向 CppDepend.Console.exe 来自之前安装/下载的 CppDepend 包的可执行文件。不要忘记至少启动一次以触发许可证。详细信息可在文档中找到。在我的情况下,它安装在 [D:\CppDepend\]。我更喜欢在文件夹名称中保留版本,这样很容易知道我的代理是否在使用该工具的正确版本。如果我更改可执行文件文件夹,此功能将自动影响所有使用该功能的构建。在任何情况下,它都不会重新触发自动构建。然后该变量将从下一次构建开始重新应用。

通常在该屏幕中保留这些功能或可执行文件。它汇总了您的代理的所有功能。 有关此功能的更多详细信息,请访问 Atlassian 网站.

注意: 该能力(capability)会显示与现有构建的依赖关系。话虽如此,如果在脚本中使用了能力变量,您将无法在任何地方看到存在活动依赖关系。因此,在有多个代理的情况下,您需要手动指定应为构建阶段使用哪个代理。

转到您的代理配置

  • 点击 选项轮;
  • 选择 代理;
  • 这将使您直接跳转到管理面板中的 代理 构建资源;
  • 选择您的任一 Windows构建代理 通过点击它。
代理配置

回到顶部

代理摘要

  • 验证您的 代理名称 有效;
  • 选择 功能 标签页;
  • 点击 添加功能 链接按钮。
代理摘要

添加功能

  • 功能类型: 可执行文件
  • 类型: 命令
  • 可执行文件标签: CppDepend
  • 路径: D:\CppDepend\CppDepend.Console.exe
  • 点击按钮 添加
添加功能

查看代理特定功能

如您所见,完成前面的步骤后,您将添加特定于代理的功能。现在,我们可以在构建过程中使用该功能。

代理特定功能

Bamboo 构建配置 - Capabilities(简单)

假设您的构建已存在,并且您想添加 CppDepend.Console.exe命令 在下面的教程中,我将使用一个简单的 Dotnet Core 2.1 解决方案作为示例。构建将被命名为 IdentityServer4.LdapExtension (GitHub 项目),其中您的 Git 仓库、CppDepend 项目和基本构建已经配置好(检出和构建)。

向构建阶段添加新任务

  • 确保您处于项目的配置中;
  • 转到您通常运行测试和其他内容的构建作业;
  • 任务 选项卡中,您可以找到当前作业的所有详细信息;
  • 添加新任务。
添加任务

弹出窗口显示后

  • 搜索命令 在搜索框中;
  • 选择命令 通过点击它。
弹出窗口

让我们配置命令

  • 新的命令任务应该已经显示;
  • 此情况下任务的描述: CppDepend;
  • 选择您为代理功能创建的可执行文件: CppDepend;
  • 输入 CppDepend 项目文件(.cdproj 扩展名)完整路径作为参数。在此之前,请确保在 CppDepend UI 的 CppDepend Project Properties > Paths Referenced 中,所有路径都定义为相对路径(相对于项目文件的位置)。
    示例: ${bamboo.build.working.directory}/IdentityServer.LdapExtension.cdproj
    您可以添加 /silent 选项(如果您不想查看 CppDepend 的所有输出日志),但我强烈建议不要在构建中这样做。您可能需要使用日志进行调试。
  • 保存您的配置
配置命令

构建您的新配置

我建议在进行任何修改后始终进行构建。这样可以很容易看出构建失败是真正的原因(配置)还是由于代码变更(触发的构建)。

请注意 CppDepend.Console.exe 返回 非零退出 代码(当至少一个质量门禁失败时)。此退出代码可用于在这种情况下停止您的构建过程。更多说明请参阅 质量门页面.

即使在失败的情况下报告也会存在,但构建将显示为红色,您的构件可能甚至不可用。由于没有 /ErrorLevel 自定义的退出代码配置,那么您将需要采用不同的方式来忽略这些错误。

  • 选项1: 通过在代码中添加 CppDepend 的特殊标记来忽略错误。在这种情况下,只需在需要的地方添加 CppDepend 忽略属性,并在提交后重新启动构建。
  • 选项2: 使用脚本而不是命令,以便完全控制您的流程,即使出现质量门禁问题也能继续。这是下一节的主题。

Bamboo 构建配置 - PowerShell 脚本(复杂)

如前所述,本节主要面向那些已有项目且没有会导致质量门禁失败的严重问题的用户,或者那些希望在质量门禁处失败但仍想生成报告的用户。

别误会, 能力 创建是值得的。然而,在这种情况下唯一的缺点是 Capability 将无法检测到我们对 CppDepend 的构建依赖。

在这种情况下,我们将创建一个脚本(或添加到当前的 Dotnet Core 构建脚本),而不是创建命令

  • 进入您的构建配置,默认阶段(或特定阶段),然后点击 添加任务;
  • 选择 脚本 类型;
  • 输入 描述 并选择 Windows PowerShell 作为解释器;
  • 在这种情况下,我们将使用 内联 类型而不是 PS1 shell 脚本。此选项将在后台自动创建一个 shell 脚本。只需照着图片下方的代码片段重写即可。
脚本

PowerShell 使用现有的 CppDepend 项目文件(*.cdproj 扩展名,这是一个 XML 文件)。然后创建最终命令并执行它(Invoke-Expression)。下面是上图中使用的 PowerShell 脚本。

# CDProj 通常应该是构建中的一个变量,其他部分也是如此。
# 这样您可以使用构建脚本而不是内联命令,而该构建脚本
# 可以成为您构建仓库的一部分。
$cdproj = "IdentityServer.LdapExtension.cdproj"

# 加载CppDepend XML项目文件。
$ndependXml = [xml](Get-Content .\${cdproj})

# 启动CppDepend命令
$expr = "${bamboo.capability.system.builder.command.CppDepend} " +`
   "${bamboo.build.working.directory}\${cdproj} " +`
   "/OutDir ${bamboo.build.working.directory}\CppDependOut"

Invoke-Expression $expr

# 执行结果的简单输出。
write-host "The exit code was: ${LASTEXITCODE}"

生成CppDepend工件

现在,您应该能够构建并获得 CppDepend 输出文件夹。在此演示中,我们有 CppDependOut 与文件夹相同。为此,我们需要添加构件配置。请返回到构建配置和包含 CppDepend 脚本的默认阶段。完成后,选择 工件 标签页并点击 创建工件 按钮。

要输入的字段为:

  • 名称: CppDepend
  • 位置: CppDependOut
  • 复制模式: **/*

完成此操作后,您应该能够重新构建项目并查看构建工件是否存在。请注意,如果您想比较构建,可以重用共享工件。这稍微复杂一些,但是可行的,本教程不会探讨。您也可以简单地避免在每次新构建时清理构建文件夹。我不建议这样做,但这是可能行得通的方法。

例如,我们有以下成功的构建:

  • 绿色构建 = 成功
  • 转到您构建的工件
  • 点击您感兴趣的构件名称(本例中为 CppDepend)
工件

构件打开后,将显示 ZIP 文件的内容。只需点击文件 CppDependReport.html。这样做会打开一个如下所示的链接: http://localhost:8085/artifact/I4E-ID/shared/build-19/CppDepend/CppDependReport.html#Main

您的页面应与此类似(实际上取决于您的项目):

报告

立即试用 CppDepend

开始 14 天免费试用,畅享全部文档功能。无需信用卡。