1

我正在尝试提出一种持续集成模式,其中我们的 Maven 项目仅在满足某些质量阈值时才会部署工件。我们正在使用声纳来运行质量报告,但似乎我必须运行:

mvn clean install sonar:sonar && \
mvn deploy -DskipTests -DskipITs

(或者更确切地说,它相当于单独的 Jenkins 构建步骤)。

这涉及构建代码两次,因此使每个整体构建工作对于持续集成来说太长了。

如果我像这样运行单线:

mvn clean deploy sonar:sonar

在运行 Sonar 之前将工件部署到存储库。在不离开 Maven 的情况下,是否有更好的解决方案?

4

3 回答 3

1

好的,我最终使用的方法是三个单独的构建步骤,如下:

  • mvn clean install -DskipTests -DskipITs
  • mvn 声纳:声纳
  • mvn jar:jar 部署:部署

这似乎适用于 Maven 多模块项目。如果 Sonar 构建失败(通过 BuildBreaker 插件),则不会部署工件。如果 Sonar 通过,则 Maven 将 Jars 重新附加到项目并部署它们。

于 2013-09-10T13:33:18.447 回答
0

我们使用一个自定义 Jenkins 插件来解决这个问题,该插件调用 Maven 6-10 次。这真的没那么糟糕,你只需要确保在test阶段之后“做事”的所有执行都包括skipTests=true. 这个问题也可以通过三个 Maven 构建步骤来解决:

  • mvn clean package(我不喜欢将工件放在本地仓库中,如果它们未能通过声纳质量门的想法)
  • mvn sonar:sonar
  • mvn install (or deploy) -DskipTests=true

当您说多次“构建”项目需要太长时间时,您的意思是什么?Maven 不会重新编译已经是最新的并且您正在跳过测试的代码。剩余的处理不足以成为负担。如果你有一些时髦的插件再次运行(在最后的调用中),它很可能有一个skip*选项。

您会发现 SonarQube 不仅有助于检查您的代码质量,而且还是实施构建治理的好方法。这对小团队来说不是很有用,但是当您有数十或数百名开发人员接触大型代码库时,这是您保持软件质量的唯一希望,每个人都可能是也可能不是注重质量的程序员:)。当然,正如 Mark 所说,您需要安装并启用 Build Breaker 插件。

于 2013-09-06T05:17:13.447 回答
0

Sonar Maven 文档建议按如下方式运行 Maven

mvn clean install -DskipTests=true
mvn sonar:sonar

“替代方法”部分描述了如何将这些目标作为一个步骤执行,但随后测试将运行两次。

我认为您可以做很多事情来避免创建 2-3 个 Maven 构建步骤,但是,可以将构建中断插件配置为在您指定的质量标准被违反时自动使您的构建失败。

于 2013-08-12T21:33:48.790 回答