因此,我最近一直在使用concourse和雲代工廠調查ci/cd管道,並且我一直在困惑於實現此目的的最佳方式。所以我一直在考慮整個流程如何從開發到發佈。有很多談話和視頻在很高的層次上討論這個問題,但是他們經常會抽象出太多實際的實施細節以使其有用。就像人們如何在實際公司中推出這些產品一樣?我有很多問題,所以我會試着在這裏列出其中的一些,希望有人能夠給我一點啓發。使用Concourse和Cloud Foundry進行連續部署的最佳實踐
整個流程和流水線在概念上從開發到製造看起來是什麼樣子?到目前爲止,我沿着線的東西:在自己的組織
在開發過程中的每個產品團隊,每個開發者可能有自己的發展「空間」,他們手動
cf push
到可能,只是制定打擊。將會有開發空間,開發人員可以直接將其推向以及只能由自動化管道使用的空間來部署用於功能測試的工件。一旦開發者完成一個特點,他們會做一個拉請求,這會觸發與使用類似的
git-multibranch-resource
或git-pullrequest-resource
一些試驗,這將鉤到GitHub的需要的狀態檢查掛鉤,如果任何回報一個較小的管道特定的PR可以合併成主或者不合並一旦所有檢查通過並且拉請求合併到主設備中,下面的管道被啓動,這在將工件釋放到產品之前驗證主分支。
code repo [master] -> build -> snapshot artifact repo -> deploy to test space -> run functional tests -> deploy to staging space -> run smoke tests and maybe other regression tests -> deploy artifact to prod -> monitoring/rollbacks (?)
可以/應該被添加到該管線或該方法的任何部分什麼其他東西?
一旦你自動部署,你怎麼也自動化事情發生像金絲雀版本或回滾一旦發生?這應該是管道的一部分還是完全獨立的東西?
我一直在玩臨時創建空間然後在功能測試階段將其拆分的想法,這樣做會有什麼好處嗎?這個想法是,正在部署的應用程序將有自己的乾淨環境使用,但這可能會很慢,並且很難知道每個空間內需要哪些服務。您將不得不閱讀清單,該清單僅指定服務名稱,這似乎需要某種在相同空間內命名服務實例的規範方式?另一種辦法是管理一個似乎也很複雜的空間池......
管道應該生成清單文件嗎?還是應該完全由開發者決定?只有開發人員知道應用程序需要哪些服務,而且似乎像實例計數,內存等應該是性能測試/管道應該能夠確定/自動化的東西。你可以在管道中生成一個清單,但是如果沒有閱讀清單,你就不知道應用程序需要哪些服務......雞和雞蛋問題?
我還有很多炙手可熱的問題,但現在我會在這裏把它關掉。我知道這些主題在Concourse和Cloud Foundry之間來回跳動,但是在討論CI/CD概念時,似乎實際細節通常是將兩者緊密結合在一起的實際棘手問題。我也知道具體的實施細節通常對每家公司都非常具體,但如果人們可以談論他們如何在他們的公司使用Concourse和Cloud Foundry實施這些管道/自動化管道(如果您可以將這些管道當然細節)。感謝大家!
感謝您的全面解答。另一件事,我一直很好奇它有多少管道是由開發人員編寫和維護的?有一些質量門可以由組織強制規定,傳統上我們的詹金斯構建一直由REG團隊完全管理......但這意味着每一個破碎的構建必須經過它們。你在哪裏劃定了自主權與開發者之間的界限,以控制和管理他們自己的管道,同時也確保在測試和測試的範圍內保持某種一致性? – shinything
我們是一家小公司,因此讓開發人員編寫並維護管道。這對我們很有用,因爲我們不僅在Concourse進行測試。在我看來,它變成了更多的開發工具。在日常工作中我面臨的每一個重複性任務,我都嘗試自動化以節省開發資源。這從測試開始,但隨着我們發佈版本的自動更新以及我們使用concourse引導一個完整的波什環境的時間更長。 – gdenn