将多个 Maven 目标合并到一个事务中(例如,部署和站点部署,如果站点部署失败怎么办?[已关闭]

2022-09-03 02:34:10

我配置了构建服务器来做

clean javadoc:jar deploy site-deploy

现在,如果站点部署失败(因为站点未生成,或者有人使用了错误的父 pom),则生成服务器将显示失败的生成,但已应用部署。

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

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


答案 1

在这里,我提出了一个与帮助bash操作员的紧密解决方案&&

mvn clean javadoc:jar install site-deploy && mvn deploy:deploy-file {PARAM}

这将让您

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

唯一会失败的情况是,当您的目标失败时,将不会有 回滚 。我认为阶段的失败将是非常罕见的。deploysite-deploydeploy


答案 2

deploy并且通常是通过HTTP完成的,并且可能部署到不同的地方,因此实现事务语义可能是不可能的,您需要将其视为最终的一致性问题。site-deploy

在 CI 上下文中(您提到的您正在使用),如果失败,则需要执行以下操作之一:site-deploy

  • 回滚deploy;
  • 重试目标。site-deploy

我不熟悉快速构建,但使用其他常见的CI工具,您可以将任务拆分为单独的作业,以便轻松应用任何一种解决方案。

由于目标(双关语)似乎是在构建站点时捕获错误,因此可以选择创建一系列作业:

  1. mvn install site运行定期测试并构建网站;
  2. 并行运行的两个作业,如果失败,可以重试:
    • mvn deploy;
    • mvn site-deploy.

这可能或多或少地复杂,具体取决于工作空间在作业之间共享的方式。


推荐