詹金斯回滚以前版本的部署

jenkins rollback previous version of deploy

事情是这样的。我有一些 jenkins 管道作业部署了一些 java 后端应用程序。管道由来自 SCM 的脚本运行。该脚本是获取开发团队代码的脚本,并且: 1-签出该代码 2- 编译并创建 WAR 3- 复制 war 到网络服务器。

现在开发人员想要实现回滚,如果作业是 运行,并且新部署已完成但失败了,他们想回到上一个工作正常的部署。

有没有办法在 jenkins 中执行此操作,例如使用 Jfrog artifactory?我们配置了 artifactory,我们可以将 WARS(或其他文件)上传到那个 repo,但没有被使用。我不知道如何实现这个。我在想为不同的 WAR 文件使用标签,如果部署失败,从 artifactory latest WAR 抓取工作正常吗?这可能吗?如何使用人工制品在詹金斯中完成这种方法。我可以实施一个新步骤,在创建 WAR 之后,它将 WAA 上传到 artifactory,但是我如何将它与 jenkins 连接以使用我想要的 WAR?关于如何执行此操作的任何建议? 谢谢!

我建议你这些方法:

没有 Artifactory

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

工作流程可以是:

  • 在将您的发布分支合并到 master 之前,验证标签是否存在于之前的稳定版本或创建一个新的。
  • 将您的发布(qa、测试或其他)合并到 master 分支
  • 使用 master 分支执行当前管道。
  • 如果检测到某些错误,请使用您的 SCM(csv、svn、git 等)执行回滚。例如,bitbucket 在合并的拉取请求部分有一个 revert 选项。
  • 以主分支为参数再次执行相同的管道。如果无法回滚,则使用最后一个稳定标记作为参数执行此管道。

使用 Artifactory 或一些 Artifact Repository

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

在最简单的模式中,您只需要构建 war 的增量发布版本。 Spring 版本以类似的方式工作:

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

例如:

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

其他类似技巧

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

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

  1. 昨天晚上你发布了prod.32.ehR456e版本
  2. 今天看来这个版本在生产中有问题。
  3. 使用自动部署管道,通过重新部署存储在 github 个版本或 gitlab 包中的版本 prod.31.fBr451e 回滚。