2016-05-16 31 views
0

我一直在研究並試圖找出最佳的分支和部署策略來完成以下要求。也許我錯過了一些東西,但它比看起來更復雜。理想情況下,我們只有一個永久分支,'主',可以有特定的提交標記爲將發佈標記爲生產。如何使用TeamCity和Octopus實現這種分支和部署策略

我們目前的策略是基於Git Flow並擁有永久分支機構的「主人」(只有發佈到生產)和「開發」。使用多個永久性分支機構模型變得複雜的主要原因是「促進」從分期環境到生產的相同構建的概念。目前,這需要在單獨的源代碼分支中完成(部署到分段來自「開發」,部署到來自「主」的產品)。

工具:的Git(VSTS),TeamCity的,八達通部署

要求(功能和修補程序的生命週期):

  • 所有的代碼通過引入請求審查(通過分支政策執行)
  • 將所有代碼部署到分段環境進行測試
  • 我們可以快速返回到deplo代碼的任何快照此前YED
  • 如果測試成功,那麼相同的生成可以「提升」從我們的分段環境的生產(無需重新建立)

特性隨時間累積的推出,以生產爲一個單一的前發佈。修補程序必須能夠通過,而不會陷入「全部或全部」下一個常規發行版中。

我喜歡有一個帶有標籤的永久分支的想法(re:master/develop split是多餘的,http://endoflineblog.com/gitflow-considered-harmful),但是擁有額外的永久分支可以更好地部署到八達通的不同生命週期/版本(功能和修補程序) 。

我一直在摔跤如何最好地把這個關閉,我可能會過度複雜的事情。任何反饋意見。

+0

你的問題實際上是什麼?你已經描述了基礎設施和一些一般的想法,但是在你的文本中沒有問題,也沒有答案可以給出(討論和自以爲是的評論實際上不是答案)。 – cyberskunk

+0

對不起。我更新了標題。我試圖找出如何使用列出的工具完成列出的要求。 – FahnzMode

+0

這個問題太寬了。這些是2個自動化工具和一個SCM,他們幾乎可以完成任何事情。你能提供一個設計/實踐,我們看看我們是否能提供改進它的想法?這可能會更容易。 –

回答

1

看起來你有很多問題,而且它們很廣泛......我會爲每個需求添加一些註釋作爲對話初學者,但是這整個線程可能會被版主阻止,因爲它絕對不是SO所提出的問題的風格。


所有的代碼通過

我沒有看過VSTS的年齡引入請求(通過分支政策執行)審查,但是我希望他們已經支持分支機構的政策和拉 - 請求,所以不知道在這裏有什麼需要,除了配置存儲庫中的設置。

如果VSTS不支持這種情況,您可能會考慮轉移到工具,例如, BitBucketGitHub等。如果您不能(或不想)使用雲託管版本,則這兩種方法都有本地版本。

所有代碼被部署到一個登臺環境測試

您實現與建立lifecycles in Octopus Deploy,以確保部署/促銷活動按照你想要的順序。

我們可以快速回到先前部署

您已經有了源代碼控制代碼的任何快照,所以你現在需要的是從被部署的環境中的代碼可追溯,以在章魚部署部署版本,在TeamCity的構建工作,分公司和詳細的在你的源代碼控制提交。

有幾件事情,你可以做,以實現這一目標:

  1. 定義一個適合自己的版本控制方案。我喜歡使用語義版本控制。 「主要」和「次要」版本由開發者定義的,和「修補程序」是從TeamCity的(%build.number%)的自增數。每個git push構建代碼並生成一個獨特的構建版本(%major%。%minor%。%build.number%)

  2. 作爲TeamCity構建步驟的一部分,在編譯代碼之前,請確保您的源代碼文件被修補爲版本號由每個版本分配,提交散列從您的源代碼管理,和分支名稱。例如如果您使用的是.NET,確保所有的AssemblyInfo.cs文件是與版本更新,所以該版本被嵌入的二進制文件。這允許任何人查詢查看二進制文件的屬性的版本,並且還允許您在應用本身上顯示應用版本(例如狀態欄,頁腳,標題,關於框等)

  3. 有TeamCity的標籤,每次構建的版本號源控制,所以你可以很快看到您的源控制歷史。你可能只想爲master分支做這件事,儘管這是你關心的。

  4. 有無章魚標籤與部署的版本號和環境的名稱源控制,這樣就可以很快看到(從源控制)什麼得到了部署在。

步驟1和2是最重要的,真的。 3和4是很好的。大多數時候,你只打開在環境中的應用程序,檢查「關於」提交哈希,並做了git checkout到提交哈希...

如果測試成功,那麼同樣的打造可於「提升」從我們的分段環境的生產(無需重新建立)

再次,Octopus Deploy lifecycles,並確保任何在每個環境中不同的應用程序的配置文件中被定義,這是更新在八達通部署期間,使用environment-specific variables

就分支工作流程而言,最後一項要求強制要求在部署生命週期開始之前將更改合併到master(或任何您的「生產」分支)。