将多个Maven目标组合到一个事务中(例如部署和站点部署,如果站点部署失败怎么办?)

JF *_*ier 16 java deployment transactions maven

我配置了构建服务器

clean javadoc:jar deploy site-deploy

现在,如果站点部署失败(因为站点没有构建,或者有人使用了错误的父pom),构建服务器显示构建失败,但部署已经应用.

有没有办法以事务方式"组合"部署和站点部署?

或者我应该使用不同的目标/阶段链(例如install之前site-deploy)?

Ris*_*ale 7

在这里,我提出了一个帮助bash &&运算符的紧密解决方案

mvn clean javadoc:jar install site-deploy && mvn deploy:deploy-file {PARAM}
Run Code Online (Sandbox Code Playgroud)

这会让你

  • 如果在install阶段期间任何目标失败,则构建失败
  • 如果站点部署失败,则不会将您的工件推送/部署到远程存储库
  • 如果site-deploy失败,则无需编写任何自定义回滚机制

这个失败的唯一情况是当你的deploy目标失败时,就不会有回滚site-deploy.我认为deploy阶段的失败将非常罕见.


man*_*uti 2

我能找到使用 Maven 核心功能的唯一方法是通过发布插件的回滚目标。然而,这意味着您最好更改原始构建命令以也使用发布插件,因为文档中的此页面提到了以下内容:

要回滚版本,必须满足以下要求:

  • 你还没有运行release:clean过这个项目。这意味着先前发布命令中的备份文件和发布描述符仍然存在

然而,似乎很容易做到这一点,因为发布插件的执行目标已经deploy site-deploy默认执行,这正是您正在做的事情。至于javadoc:jar目标,可以附加到本常见问题解答中提到的发布配置文件中中提到的发布配置文件中。

如果由于某种原因无法使用发布插件,那么我认为解决此问题的唯一方法是通过构建环境本身。您可以将构建分为两个阶段:

  1. 第一阶段运行deploy目标。
  2. 第二阶段运行site-deploy

如果第二阶段失败,您可以通过执行第一阶段来手动回滚,但要针对 SCM 中的先前修订版(上次成功部署的修订版)进行回滚。