一千萬個為什麽

搜索

如何在多個環境中同步部署(尤其是數據庫對象更改)



我是DevOps工程師和幾個月前的一個團隊的軟件工程師,開發人員從擁有一個Oracle數據庫的中央數據庫轉移到他們的個人筆記本電腦上的CentOS虛擬機上。從中央數據庫遷移出來的目的是減少對數據庫管理員的依賴,並消除源自不一致數據的問題。

共享和確保數據庫與團隊中每個人同步的計劃是每個人都將與每個人分享變更腳本。問題在於我們使用Skype進行通信(我們只是設置了閑置狀態,但尚未開始充分使用它),雖然人們有時會發布數據庫更改腳本的文本,但一些人可能會錯過。另一個問題是一些開發人員錯過發布更改。此外,新版本部署在生產環境中,而無需部署在測試和演示環境中。

這對我們來說是一個嚴峻的挑戰,特別是最近我負責確保我們的Demo部署與Production部署同步的我。 由於缺少更改腳本或缺少DB對象,大多數同步問題都與數據庫缺乏同步有關。 Oracle是我們的首選數據庫。

Demo環境中的一個典型部署是一個非常痛苦的過程,涉及測試應用程序,並且由於缺少數據庫表列,函數,存儲過程以及問題,我們必須查找缺失的數據庫對象,將它們應用到數據庫,然後繼續,直到所有問題得到解決。

我怎樣才能解決這個問題,以確保順利,無痛和省時的部署?將我們的應用程序遷移到Docker可以幫助解決數據庫同步問題以及開發人員相關的缺乏紀律問題?我們可以采取什麽程序來改善這方面的情況?

轉載註明原文: 如何在多個環境中同步部署(尤其是數據庫對象更改)

一共有 2 個回答:

我會將架構管理集成到應用程序本身(或與之一起)。

應該沿著應用程序代碼提交對模式的任何更改(因此也標記)。

There's already a bunch of possibilities listed in this question: What practices or tools enable Continuous Deployment of Databases

使用這種工具,使用內存數據庫(如h2或中央數據庫)並讓應用程序在啟動時檢查架構版本(存儲在數據庫中),以便在應用程序啟動時獲取更新的數據庫架構。

這不會解決你的紀律問題,並且可能會創建新的問題,因為這通常伴隨著對模式的嚴格版本控制,強制版本可以用預先提交的鉤子來完成,但這是一項艱巨的工作。

在我們公司,我們在VCS(Git)中管理我們的應用程序代碼,並且我們所處理的大多數應用程序都在隨應用程序一起提供的安裝腳本中安裝其核心數據庫。

如果我們必須為我們的客戶之一擴展或定制一個涉及擴展數據庫或執行數據庫定制的應用程序,那麽我們將隨代碼一起提供一個安裝腳本,它將通過應用程序的數據庫層/包裝器執行數據庫操作/驅動程序。

這樣,一旦將代碼合並到VCS存儲庫中,每個將檢出此代碼的開發人員都將檢索這些數據庫更改。在合並代碼之後,這些數據庫更改將最終在每個環境(測試,UAT和生產節點)上進行,這樣所有數據庫更改都將順利展開。

這是一個易於實施的方法。如果您需要更高級的管理功能,您還可以深入研究數據庫專用的源代碼管理工具。