2

如果当前构件在任何时候失败,Jenkins是否可以部署上次构建的构件的构件?如果是这样如何?Jenkins - 如果构建失败,则部署上次成功构建的构件

我正在使用rsync从我的构建步骤之一部署我的文件从工作区。

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

+3

是否有任何理由为什么不在构建成功时进行部署?如果这样做,每当构建失败时,您已经部署了最后一个成功的版本。无需重新部署已部署的版本。 – juhist

+0

因为作为构建过程的一部分,对登台服务器进行了部署,然后对其执行一些WebDriver测试(behat/mink)。如果这些测试失败,那么我希望将最后一次已知的成功构建部署回到临时服务器。部署到生产是作为构建后步骤完成的。 –

+1

如果构建失败,则不要推送到分段。分期应该看到,这种构建没有发生。 (和@juhist说的一样。) – Blrfl

回答

3

我建议在部署时将已部署的(成功构建并测试的)版本复制到部署机器上的某个位置。

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

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 

这应该给你一个错误的退出状态的失败和重新部署的最后一次成功的版本。

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

+0

很好的答案,非常感谢你 –

相关问题