Continuous integration Jenkins-如果构建失败,则部署上一个成功构建的工件

Continuous integration Jenkins-如果构建失败,则部署上一个成功构建的工件,continuous-integration,deployment,continuous-delivery,jenkins,Continuous Integration,Deployment,Continuous Delivery,Jenkins,如果当前版本在任何时候失败,Jenkins是否可以部署上一个成功版本的工件?如果是,怎么做 我目前正在使用rsync从工作区部署文件,作为构建步骤之一 我知道有一个名为BuildResultTrigger的插件,我猜我可以使用它,但我不知道如何访问存档的工件,并告诉我当前的构建哪一个是最后一个成功的构建。我建议在部署时复制已经部署的(成功构建并测试过的)插件版本到部署计算机上的某个位置 然后,在Jenkins上运行测试时(假设您使用命令行启动测试): 这将在失败时为您提供错误的退出状态,并重新部

如果当前版本在任何时候失败,Jenkins是否可以部署上一个成功版本的工件?如果是,怎么做

我目前正在使用rsync从工作区部署文件,作为构建步骤之一


我知道有一个名为
BuildResultTrigger
的插件,我猜我可以使用它,但我不知道如何访问存档的工件,并告诉我当前的构建哪一个是最后一个成功的构建。

我建议在部署时复制已经部署的(成功构建并测试过的)插件版本到部署计算机上的某个位置

然后,在Jenkins上运行测试时(假设您使用命令行启动测试):

这将在失败时为您提供错误的退出状态,并重新部署最后一个成功的版本


根据需要调整解决方案(例如,您可能以“sh runtests.sh”以外的另一种方式启动测试,部署可能需要重新启动服务器,而不仅仅是复制文件,并且目录路径需要调整)。

是否有任何理由不在构建成功时简单部署?如果这样做,每当构建失败时,您就已经部署了最后一个成功的版本。无需重新部署已部署的版本。因为作为构建过程的一部分,将部署到临时服务器,然后在该服务器上运行一些WebDriver测试(behat/mink)。如果这些测试失败,那么我希望将最后一个已知的成功构建部署回临时服务器。部署到生产环境是作为生成后步骤完成的。如果生成失败,请不要推进到暂存。登台应该将其视为构建未发生的等价物。(与@juhist所说的相同)好的,但是如果单元测试通过,那么我想部署到staging,然后运行webdriver测试,这需要部署。您是否存储上次成功构建的id/name/任何内容?如果是这样,那么如果所有测试都通过了,您的测试脚本是否可以更新该存储值,并且您的部署脚本是否可以部署由该id/name/which指向的工件?如果测试未通过,则不会更新该值,因此会选择最后一次成功构建。
ssh deploymentmachine rm -rf /where/you/store/them
ssh deploymentmachine cp -R /where/you/deploy/them /where/you/store/them
rsync -rvz /where/jenkins/built/the/files deploymentmachine:/where/you/deploy/them
ssh deploymentmachine sh runtests.sh || \
 (ssh deploymentmachine rm -rf /where/you/deploy/them; \
  ssh deploymentmachine cp -R /where/you/store/them /where/you/deploy/them; \
  ssh deploymentmachine rm -rf /where/you/store/them
  exit 1)
ssh deploymentmachine rm -rf /where/you/store/them