我正在尝试提出一种持续集成模式,我们的Maven项目只会在满足某些质量阈值的情况下部署工件。我们正在使用Sonar来运行质量报告,但似乎我必须运行:
mvn clean install sonar:sonar && \
mvn deploy -DskipTests -DskipITs
(或者相当于单独的Jenkins构建步骤)。
这涉及两次构建代码,因此每个整体构建工作都需要太长时间才能进行持续集成。
如果我像以下那样运行单线:
mvn clean deploy sonar:sonar
在运行Sonar之前,工件将部署到存储库。如果不离开Maven,还有更好的解决方案吗?
答案 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)
好的,我最终使用的方法是三个单独的构建步骤,如下所示:
这似乎适用于Maven多模块项目。如果Sonar失败了构建(通过BuildBreaker插件),则不会部署工件。如果Sonar通过,那么Maven将Jars重新附加到项目并部署它们。