我将构建服务器配置为
clean javadoc:jar deploy site-deploy
现在,如果站点部署失败(因为站点未构建,或者某人使用了错误的父pom),则构建服务器显示构建失败,但部署已应用。
有没有办法以事务方式“合并”部署和站点部署?
或者我应该使用不同的目标/阶段链(例如install
之前的site-deploy
)?
答案 0 :(得分:7)
我在这里提出了一个帮助bash &&
运算符
mvn clean javadoc:jar install site-deploy && mvn deploy:deploy-file {PARAM}
这会让你
install
阶段期间失败,则site-deploy
失败,则无需编写任何自定义回滚机制唯一不会失败的情况是当您的deploy
目标失败时,将不会回滚site-deploy
。我认为deploy
阶段的失败将非常罕见。
答案 1 :(得分:3)
deploy
和site-deploy
通常通过HTTP完成并可能部署到不同的地方,因此实现事务语义可能是不可能的,您需要将其视为最终的一致性问题。
在CI上下文中(您提到的正在使用),如果site-deploy
失败,您需要:
deploy
; site-deploy
目标。我不熟悉quickbuild,但使用其他常见CI工具,您可以将任务拆分为单独的作业,以便轻松应用任何一种解决方案。
由于目标(双关语)似乎是在构建网站时捕获错误,因此选项可能是创建一系列工作:
mvn install site
运行常规测试并构建网站; mvn deploy
; mvn site-deploy
。这可能或多或少复杂,具体取决于作业之间共享工作空间的方式。
答案 2 :(得分:2)
我使用Maven核心功能找到的唯一方法是通过Release Plugin的rollback目标。但这意味着您最好更改原始构建命令以使用Release Plugin,因为文档中的this page提到了以下内容:
要回滚版本,必须满足以下要求:
- 您还没有在项目上运行
release:clean
。这意味着备份文件和先前版本命令中的发布描述符仍然存在。
但是,似乎很容易做到这一点,因为Release Plugin的perform目标默认情况下已经执行deploy site-deploy
,这正是您正在做的事情。至于javadoc:jar
目标,可以将其附加到this FAQ中提到的发布配置文件中。
如果由于某种原因,无法使用Release Plugin,那么我认为解决这个问题的唯一方法就是通过构建环境本身。您可以将构建分为两个阶段:
deploy
目标。site-deploy
。如果第二阶段失败,您可以通过执行第一阶段而不是SCM中的上一版本(上次成功部署的版本)来手动回滚。