Sonar和Maven工件部署

时间:2013-08-12 10:40:07

标签: maven continuous-integration sonarqube

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

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

(或者相当于单独的Jenkins构建步骤)。

这涉及两次构建代码,因此每个整体构建工作都需要太长时间才能进行持续集成。

如果我像以下那样运行单线:

mvn clean deploy sonar:sonar

在运行Sonar之前,工件将部署到存储库。如果不离开Maven,还有更好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

声纳Maven documentation建议按如下方式运行Maven

mvn clean install -DskipTests=true
mvn sonar:sonar

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

我认为您无法避免创建2-3个Maven构建步骤,但是,可以将build breaker plugin配置为在违反指定的质量标准时自动使构建失败。

答案 1 :(得分: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插件。

答案 2 :(得分:0)

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

  • mvn clean install -DskipTests -DskipITs
  • mvn sonar:sonar
  • mvn jar:jar deploy:deploy

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