jenkins回滚部署的先前版本

时间:2018-10-09 13:47:11

标签: jenkins jenkins-pipeline artifactory rollback

这是东西。我有一些jenkins管道作业,其中部署了一些Java后端应用程序。管道由SCM的脚本运行。该脚本是获取开发团队代码的脚本,并且: 1-签出该代码 2-编译并创建WAR 3-将war复制到Web服务器。

现在,开发人员希望实施回滚,如果运行了一项作业,并且新部署完成但失败了,他们想回到上一个运行良好的状态。

在詹金斯中是否有办法做到这一点,例如使用Jfrog人工制品?我们已配置了人工产品,并且可以将WARS(或其他文件)上传到该存储库,但未使用。我不知道该如何实现。我当时在考虑将标签用于不同的WAR文件,如果部署失败,那么从可以正常工作的最新WAR中获取信息吗?这可能吗?如何用人工制品在詹金斯中完成这种方法。我可以执行一个新步骤,即在创建WAR之后,将WAA上载到工件,然后如何将tis与jenkins连接起来以使用所需的WAR?关于如何做到这一点的任何建议? 谢谢!

2 个答案:

答案 0 :(得分:2)

我建议您采用这种方法:

没有工厂

在这种情况下,您只需参数化当前管道即可接收分支名称或标记作为参数。

工作流程可能是:

  • 在将发行分支合并到master之前,请验证先前稳定发行版中标签的存在或创建一个新的发行版。
  • 将您的发行版(质量检查,测试或其他内容)合并到主分支
  • 通过 master 分支执行当前的管道。
  • 如果检测到某些错误,请使用SCM(csv,svn,git等)执行回滚。例如,bitbucket在合并的提取请求部分中具有还原选项。
  • 再次执行与主分支相同的管道作为参数。如果无法回滚,请使用最后一个稳定标记作为参数执行此管道。

使用人工工厂或某些人工仓库

在这种情况下,您需要采用软件版本控制策略。 阅读此来源:

在最简单的模式下,您只需要构建战争的增量发行版。春季版本的工作方式类似:

spring-release-versions

https://mvnrepository.com/artifact/org.springframework/spring-core

例如:

  • 今天,您有一个 5.0.0-RELEASE 稳定版本保存在您的工件中并部署在生产环境中。
  • 晚上,执行您的管道,并在最后一步将您的战争 api-5.0.0-RELEASE.war 上传到您的工件。
  • 一个月后,您有了新的发行版 5.0.1-RELEASE
  • 执行管道,如果检测到错误,则只需下载名为 5.0.0-RELEASE 的先前稳定版本并将其部署为回滚步骤即可。

其他类似技术

  • 使用docker创建应用程序的构建并分配增量版本。

答案 1 :(得分:1)

作为Artifactory的替代品,您可以使用Github发行版或Gitlab软件包,并遵循以下场景(假设使用诸如prod.build_number.short_commit_hash之类的版本控制方案):

  1. 昨天晚上您发布了prod.32.ehR456e版本
  2. 今天,该版本似乎在产品中有问题。
  3. 使用自动部署管道,通过重新部署存储在github版本或gitlab软件包中的prod.31.fBr451e版本进行回滚。