2011-10-07 67 views
1

我正在使用Maven過去2個月。我認爲我只理解它,但還不確定:)我獲得了編譯,安裝並部署到團隊存儲庫的Snapshot構建。Maven發佈過程問題(發佈插件的任何替代方案)

因此,該計劃是爲開發環境使用Snapshot構建的,一旦穩定告訴QA團隊將其用於QA,並且一旦QA接受構建,就將相同的構建推廣到生產環境。

我的要求,如果快照構建發現是好的。我需要生產中的確切位數。 如果我使用release插件,它會標記並重建源代碼並檢出標籤並進行部署(在流程中從版本字符串中刪除SNAPSHOT)。這裏的問題是,我不能保證它具有與QA接受的快照構建相同的位。

此外,我覺得標記構建是多餘的,因爲Jar manifest具有SVN修訂版。所以我總是可以回到那個SVN修訂版來從Maven工件Jar中回溯構建。

所以我的問題,是否有一種簡單的方法來促進發現可以被QA團隊接受的快照構建?

回答

1
  1. 您可以在將快照發送到QA後立即打開分支。
  2. 鎖定發送給QA的主分支/主幹。
  3. 如果接受,請使用接受的分支/主幹上的發佈插件。
  4. 將主體上的pom升級爲下一個SNAPSHOT,並在openned分支上添加任何內容時合併。
2

如果使用快照,則不能有'相同的位'。您可以從完全相同的源構建位。使用build-number-plugin將源代碼管理版本捕獲到構建中。當QA喜歡它時,標記該修訂並製作分支。然後手動將版本號設置爲所需的發行版本。或者,停止用腳踩在腳上,並按照預期使用釋放插件。

您需要使用發佈階段。運行發行版插件以生成帶有標籤的真實發行版,但是在暫存區(通過Nexus Pro,Archiva的下一個版本或altDeploymentUrl的使用)中關閉了工件。有QA測試中轉區版本。如果他們保佑它,那麼將這些小部分推廣到正式版本區域。如果QA記錄它,請刪除標籤並刪除臨時區域。

因此,您可以完成測試您想要運送的位。

+1

感謝您的回覆。儘管我希望Maven能夠輕鬆地推廣快照,但不會影響比特數。 – devPassions

+1

它不能。在你的jar裏面是一個包含POM的META-INF區域,它包含 ....- SNAPSHOT。如果你的項目是多部分的,那麼這些部分就相互依賴,所有*這些*版本都是-SNAPSHOT。他們不能被維持不變。 – bmargulies

2

我也在研究這個問題。我是一名核心Maven用戶,我仍然用發佈插件將我的頭靠在牆上(特別是在與Mercurial一起使用時)。

下面是我碰到的一些額外的,相關鏈接:

這最後一個仍然依賴於maven-release-plugin,但至少它更深入地探討了使用它的缺陷。

我們正在考慮使用我們自己的腳本來管理流程,使用Maven更新版本號(例如mvn versions:set -DnewVersion=1.1.0),但實現我們自己的分支/標記/提交工作流程。

+0

您可以讓您的CI服務器負責部署。這是[Artifactory與TeamCity集成](http://wiki.jfrog.org/confluence/display/RTF/TeamCity+Artifactory+Plugin+-+Release+Management)的例子。我相信Jenkins/Nexus或者你正在使用的任何組合都可以做到這一點。我會添加這個作爲答案。 – maba

0

一種方法是讓CI服務器與二進制存儲庫一起使用。你可以完全跳過maven-release-plugin

這是一個如何使用TeamCity Artifactory Plugin - Release Management執行的示例。

我相信,如果您使用另一個CI服務器(如Jenkins),並且還可以與其他二進制存儲庫(如Nexus)一起使用,那麼也有相同的可能性。

1

這裏有一個精彩的博客,描述了使用maven release插件的一個相當簡單的選擇。我們將在我們的項目中使用這種策略的一種改進,它可以避免發佈插件的許多問題和複雜性。

Maven Releases on Steroids