-1

假設正在進行部署管道。 SVN標籤和開發版本正在改變。那時開發人員正在進行他的改變。所以CI服務器有可能發佈新的提交未經測試的生產更改或其他衝突發生。我該如何處理這種情況。我是否需要鎖定整個主幹,直到構建管道完成。有沒有其他的工作。連續交付 - 處理中間svn提交

+1

「CI服務器發佈新的提交未經測試的生產更改」 - 呃,什麼? –

+0

假設CI服務器將開始部署管道的最後一步,這是將trunk中的源代碼標記爲特定版本,然後提交trunk以將當前開發版本更改爲下一個快照版本的過程。就在這一步之前,一個瘋狂的開發人員將他的更改提交給主幹。因此,如果ci服務器在提交後立即標記trunk,它也會標記這些更改,這在發佈的二進制文件中不存在。我是否成功解釋了這種情況? – user2903314

+0

在我看來,CI服務器不應該部署到生產環境。 –

回答

1

如果我理解正確的話,您認爲以下步驟

    後提交,生成服務器會檢查當前Trunk(假設修訂版A)
  1. 進行構建,
  2. 執行一些測試,
  3. 標籤的行李箱,如果試驗成功
  4. 並將其部署到生產(仍然只如果測試成功)

「瘋狂」的開發人員在第3步和第4步之間提交,因此創建了修訂版B.現在假設構建服務器將再次檢出最新修訂版(這將是修訂版B)。這種行爲確實會造成一些麻煩。

但是,構建服務器應該根據特定修訂執行所有步驟,這在常見設置中不是問題。例如。詹金斯通常在工作開始時有一個退房步驟。如果最後有一個標記步驟,您通常不會希望Jenkins盲目地標記當前主幹(導致您描述的問題),而是標記Jenkins工作區中籤出的修訂。

此外,請考慮在任何部署自動部署到生產之前,應至少有一些手動審批步驟。據我所知,這通常是在連續交付的情況下提及的。

持續交付的關鍵是恕我直言,你可以在任何時候按下按鈕來部署當前版本的源代碼。恕我直言,這並不意味着每個提交應該自動部署。

+0

我們可以用兩種方式進行標記。 1.複製樹幹:例如:svn copy http://mydomain.com/myproject/trunk http://mydomain.com/myproject/tags/1.0.0。 2.複製 – user2903314

+0

我們可以用兩種方式標記。 1.副本主幹:例如:svn副本http://mydomain.com/myproject/trunk http://mydomain.com/myproject/tags/1.0.0 2.複製本地工作副本,例如:svn副本。 http://mydomain.com/myproject/tags/1.0.0 因此,在CI服務器內部,我們應該始終使用用於構建和測試的檢出副本進行標記。我對嗎? – user2903314

+0

是的,這將是去恕我直言的方式。 –