2013-08-12 93 views
0

我试图想出一个持续集成模式,其中我们的Maven项目只会在满足某些质量阈值时部署工件。我们使用声纳来运行质量报告,但似乎我已经运行:Sonar和Maven工件部署

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

(或等值,而不是作为单独的詹金斯生成步骤)。

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

如果我运行一个班轮,如:

mvn clean deploy sonar:sonar 

运行声纳之前的文物被部署到存储库。没有远离Maven,是否有更好的解决方案?

回答

0

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

  • MVN干净安装-DskipTests -DskipITs
  • MVN声纳:声纳
  • MVN罐子:罐子部署:部署

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

0

声纳Maven documentation表明运行Maven如下

mvn clean install -DskipTests=true 
mvn sonar:sonar 

“替代方法”部分介绍如何将这些目标可以作为单步执行,但随后的测试将被运行两次。

我不认为你可以做很多事情来避免创建2-3个Maven构建步骤,但是,可以配置build breaker plugin在指定的质量标准被违反时自动失败构建。

0

我们用一个定制的Jenkins插件来解决这个问题,该插件调用Maven 6-10次。它确实不是那么糟糕,你只需要确保在test阶段之后“执行”的所有执行包括skipTests=true

  • mvn clean package(我不喜欢文物被安置在当地回购的想法,如果他们失败声纳质量门)
  • mvn sonar:sonar
  • :这个问题可以用三个Maven构建步骤来解决一样好
  • mvn install (or deploy) -DskipTests=true

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

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

+0

我想你必须在运行Sonar之前运行安装阶段,不是吗?官方文件说明了这一点。之后运行部署的问题是它再次运行* all *阶段,而不仅仅是编译。例如,我们有从wsdls生成代码的模块,并且这需要非零的时间量,足以不要重复它。我已经在上面发布了我的最终解决方案,这可以避免这种情况。 – RCross

+0

是的,它不是干净的任何方式你把它。我们再次运行整个生命周期,但我们会抛出各种“-Dskip *”属性。 –