5

VCS中的並行開發/分支如何影響構建工件庫設置併發布到QA?並行開發分支,構建Artifact存儲庫和QA版本

在我們公司,我們分支我們的VCS進行並行開發,並且我們通常沒有太多警告哪個分支將以何種順序發貨。

對於版本編號,我想放置一個分支標識符來顯示QA構建來自哪個分支。任何從樹幹建立將有它無分支標識符的「正常」的版本號:

trunk: 1.1.0 
branch: 1.1.0.MyBranch 
branch: 1.1.0.AnotherBranch 

原本我以爲有每個分支一個生成神器庫,併爲主幹一個主存儲庫。

但是,如果我的版本編號包含分支,那麼產品的版本號將是錯誤的(如果我正在從分支構建和釋放)。

解決此問題的方法是僅從主幹中釋放?

此外,我應該在什麼時間開始發貨,而不是從分行建立QA團隊?

我目前的想法是說服管理層將一個開發團隊分配到一個發佈命令(比如發佈一週的時間)並將他們的分支合併到主幹。然後QA開始獲取主幹構建而不是分支構建,並且已合併分支的開發團隊將任何錯誤直接固定在主幹中,而不是分支中。

* UPDATE *

更具體地說,我使用SVN的VCS和Artifactory的爲我的倉庫。我正在使用Ivy進行依賴管理。

放眼於倉庫佈局的Artifactory的幫助(Repository Layouts):

"a sequence of literals that identifies the base revision part of the artifact 
version, excluding any integration information" 
"'1.5.10', or in case of an integration revision '1.2-SNAPSHOT' the base revision 
    is '1.2'" 

這和Maven和常春藤的默認佈局建議,我認爲這是比較常見的:

MyRepo 
MyLib 
    1.1.0 (this is the dll from trunk) 
    -MyLib.dll 
    1.1.0.MyBranch-SNAPSHOT (dev builds from the "MyBranch" branch) 
    -MyLib.dll 
    1.1.0.AnotherBranch-SNAPSHOT (dev builds from the "AnotherBranch" branch) 
    -MyLib.dll 

這是使用常春藤的典型回購佈局?我會假設這需要使用Ivy的分支功能來解決構建時的依賴關係到repo中正確的分支文件夾?

*更新2 *

這是我目前的Artifactory的結構:

MySnapshotRepo 
CompanyName 
    CompanyName.MyLib 
    1.0-SNAPSHOT 
    MyLib.dll (snapshot builds from the dev branch) 
MyReleaseRepo 
CompanyName 
    CompanyName.MyLib 
    1.0.0 
    MyLib.dll (release builds from the trunk) 
    1.0.1 
    MyLib.dll (release builds from the trunk) 
    1.0.2 
    MyLib.dll (release builds from the trunk) 
  1. 我怎麼一點在常春藤在構建時特定回購?對於發行版,我只需要從發行版回購中提取二進制文件。對於快照構建,如果它們出現在快照回購中,我可以將二進制文件拉出來,如果它們丟失了,我可以將它們從發佈回購中提取出來。我知道如何鏈接庫,我只是不明白如何切換它們。

在我的IvySettings。xml文件我有:

<settings defaultResolver="defaultresolvechain"/> 

..但我不想缺省。我想指定當我調用Ivy解析命令時解析器的哪個鏈。這樣的事情:

<ivy:resolve transitive="false" resolveMode="snapshot-resolve" conf="compile,test"/> 

這是錯誤的方式來切換我需要解決的回購協議?

發佈任務有一個「解析器」屬性,它以類似的方式完美地適用於我。

此外,在我的具體示例中,我可能有多個SVN分支對應多個Artifactory快照回購。我可以參數化我解決哪種回購方式的方式嗎?或者是將所有分支的快照放到一個回購中並使用常春藤分支功能的更正確方法?

請讓我知道,如果你需要任何其他信息來協助。

回答

0

所以你有發佈構建和功能或開發構建。您將從中繼獲得您的發佈版本,並從1.1.0功能分支構建功能。根本不要使用幹線進行開發。對這些功能分支進行所有的開發,當它們成熟時,你決定將它們包含在發行版中,將它們合併到主幹中。此時此代碼出現在來自主幹的QA構建中。當你準備發佈時,你從樹幹分支,而你繼續在其他功能分支上工作並將它們合併到樹幹。

所以QA從中繼和穩定版本分支獲取構建。通過一次只有一個版本,您可以進一步簡化,並且只在實際版本發佈時從總部和分支或標籤始終進行QA。如果絕對沒有發展到幹線,這將是可能的,但所有的功能分支。

有時您需要能夠將開發版本傳遞給QA。通常在將特性分支合併到主幹之前,只要確保你沒有破壞任何東西。您可以標記預先合併,合併功能分支到主幹,並在此情況下從主幹執行QA構建,如果存在嚴重問題,則可以恢復到標記。它會阻止另一個功能分支的合併,但是如果合併到主幹不經常發生,這可能會起作用。

通過這種方式,您可以從中繼進行QA的單一設置,並且您應該管理大部分需要執行的操作。