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

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