2013-04-22 62 views
5

我有一個Jenkins作業,使用maven構建目標的'clean package deploy'作爲主git分支。然而,由於關係回購不允許重新部署,如果詹金斯作業運行不帶版本號變化第二次,它會失敗與預期400錯誤請求錯誤:通過Jenkins作業部署Maven的策略

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
    org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) 
    on project common-library: 
Failed to deploy artifacts: Could not transfer artifact 
    net.bacon.common:common-library:pom:1.2.13 from/to bacon-releases 
    (https://maven.bacon.com/nexus/content/repositories/releases): 
Failed to transfer file: 
    https://maven.bacon.com/nexus/content/repositories/releases/net/bacon/common/common-library/1.2.13/common-library-1.2.13.pom. 
Return code is: 400, ReasonPhrase:Bad Request. 

任何人都可以提出一個不同的策略,從而部署目標可以在沒有使Jenkins作業失敗的情況下運行?

+0

是否要部署快照或發行版本? – Puce 2013-04-22 13:50:04

+3

在部署階段,軟件包階段再次運行時,您不應該運行* clean package deploy *原因。看起來你沒有注意到生命週期。只需要運行* clean deploy *。如果您嘗試部署已部署的工件,則無法再次運行該工件。爲了這樣的目的,你應該使用-SNAPSHOT而不是發行版。 – khmarbaise 2013-04-22 13:50:28

+0

@puce在這種情況下,它是一個發佈版本 – Streetdaddy 2013-04-22 16:03:59

回答

4

我們所做的是自動快照構建。然後,版本自動遞增。

對於發佈版本,我們使用maven release插件並手動輸入版本。但是,您可以讓發佈插件完成這項工作。它將刪除「-SNAPSHOT」構建,部署,然後爲下一發行版本增加最後一位數字並再次追加「-SNAPSHOT」。

對於分配管理,您可以擁有兩個回購站,一個用於快照,一個用於發佈,具有不同的重新部署設置。

+0

用於部署快照,然後使用Maven Release Plugin手動執行發佈。請注意,有一個Jenkins插件可以支持Maven Release Plugin。 – Puce 2013-04-22 16:14:35

0

您應該確保主服務器上的每個提交在pom文件上攜帶自己的版本號。所以你不會重新配置。

拒絕「redeploys」有一個很好的理由:發佈版本的內容不應該改變。

如果您無法避免在主服務器上提交相同的版本號,請考慮將鏈式jenkins作業更改爲「乾淨安裝」(僅將工件存儲在本地存儲庫中),並使用「清理部署」創建新作業那只是手動啓動的。

0

這對我們的團隊也是一個問題。

我們希望maven試圖進行PASSIVE部署,所以如果部署存在於nexus上,那麼它將可接受地繼續進行SUCCESS ALREADY DEPLOYED,如果部署不存在於nexus上,它將使用SUCCESS進行上載和部署。

我們希望jenkins在構建並通過覆蓋檢查後進行部署,但如何使其僅部署未部署,並且已部署的部署將被忽略。

我們的解決方案是一個自定義腳本。

1

我們採用了 「雙重作用」 的解決方案:

  • 增量版本
  • 運行MVN安裝
  • 運行測試
  • 如果全部通過,我們運行MVN部署

這樣,我們不會嘗試部署bef我們知道的礦石全部通過了,並且我們每次都部署了獨特的版本。

我希望這會有所幫助。

+0

您是否找到了使用Jenkins從安裝的jar中運行測試的方法? – JBCP 2014-05-28 19:57:56

+0

我們不直接使用安裝的罐子。我們將它們打包成戰爭,然後裝入RPM,我們將其安裝在專用服務器上。這回答了你的問題了嗎? – 2014-05-29 05:13:41

0

您可以使用釋放候選概念。當你開始發佈時,你可以在版本中添加-RC1(例如1.1.0-RC1)。

隨着下一次重新部署,您將增加RC編號。當發佈完成並且您想要生成新的TAG時,您只能刪除該版本的RC。在TAG創建之前