2009-11-24 37 views
8

我是使用Joomla和Drupal等系統開發許多基於CMS項目的開發團隊的一員。如何部署:1修補程序中的數據庫,源代碼和二進制文件更改?

在我們的開發過程中,我們所有的代碼更改都是在Git內部進行管理的。在衝刺結束時,我們創建了一個DIFF,我們可以通過補丁將其應用到現場。

的問題是,大部分的時間,這些變化包括

  • 數據庫結構更改
  • 數據庫數據的變化
  • 源代碼更改
  • 二進制文件的更改(如圖片)

Git Diff處理源代碼變化很漂亮。除了引用文件已更改的事實外,二進制文件僅包含在Diff中。

數據庫模式更改和數據庫數據更改是一團糟。

如果存在可用於在1個補丁中部署所有這些更改的統一補丁系統,則我正在徘徊。

所以現在的問題是,「有沒有可用於部署的所有這些變化在1次射門的系統?

理想的情況下,該系統將允許運行幹運行像補丁,但對於所有的4個數據類型的

編輯: 謝謝大家對您提供的反饋意見,這是對我在這方面的研究起點

這是我迄今發現:

  1. 這是很難使用Linux包裝 系統部署基於PHP的 應用程序,因爲更改 項目反覆發生而 然後作爲釋放。

  2. 這將有可能使用DBCONFIG部署變爲 項目,但問題是 生成的MySQL數據庫的diff(架構 和數據)

  3. 真正缺少的基於PHP應用程序部署 是將 在服務器上安裝部署管理器,並會 是部署 補丁

接口

我在這個主題上開了一個Google Wave,併產生了很多信息。 如果有人有興趣閱讀這一波,請讓我知道,我會加你。

回答

2

對於處理安裝和我們的應用程序的升級,我們使用debian packaging system。 (.deb軟件包)

語境: 我們正在J2EE + Flex應用程序。通過VPN進行運輸和管理。 所以離你不遠。

全新安裝和升級版本到另一個是通過木偶製作(自動化系統管理任務的系統:安裝他我們的.deb文件)

在.deb文件,我們有

  1. 我們的編譯源碼
  2. 的數據庫的模式
  3. 二進制東西(由[DB-配置] [1]處理)
  4. 如何安裝throught易於所有其它應用NE EDED(MySQL和Tomcat的...)

=一個新鮮的東西全部安裝

我們還添加了信息從一個版本到另一個

  1. 腳本升級數據庫(每個版本)
  2. 新的二進制
  3. 新的東西在機器啓動勞克(如:幾個星期前,我們必須添加的ActiveMQ服務器)

=>一旦.deb製作正確,我們就可以在一個操作中無縫安裝或升級。 (它是自動生成的,沒有任何提示)。

Theire是每一個realease的.deb,每個的.deb具有版本號和簽名。 您可以選擇我們的任何.deb文件並進行全新安裝或從實際版本升級到他所持有的版本號。

.deb在我們的持續集成系統中。 (我們建立一個。deb每小時,就像我們即將發佈新版本一樣)


有什麼好處?

  • 自動安裝/升級,放心。
  • 回滾一個版本
  • 乾涸的原生支持

在您的確切情況

* Database Schema Changes 
* Database Data Changes 
* Source Code changes 
* Binary file changes (like images) 

數據庫=>你將不得不寫遷移腳本。每個版本一個。 (例如:1.2 update.sql 1.3 update.sql)

源代碼和二進制=>添加它們,說在女巫的版本,他們必須被複制/使用

編輯:我不知道源代碼。我們正在做的編譯代碼...


一些鏈接開始:

https://wiki.ubuntu.com/PackagingGuide/Complete

http://www.debian.org/doc/manuals/maint-guide/index.fr.html#contents(法語)

[1]:http://pwet.fr/man/linux/formats/dbconfig DBCONFIG

[1]:http://www.debian.org/doc/FAQ/ch-pkg_basics.en.html debian

+0

+1符合我所說的,用特定的包裝系統使用+版本跟蹤評論。請注意,如果不考慮與以前版本的應用程序的數據庫兼容性,則應在發佈和回滾期間將站點/服務置於離線狀態,以防發生故障。 – eglasius 2009-11-27 17:27:04

+1

@Antoine Claval,非常感謝您的反饋,我發現它非常有幫助。感謝您抽出時間來概述您的部署策略,我認爲您應該享有聲望點:) – 2009-12-03 18:55:41

1

我不認爲你會找到自動防故障機制。

我建議,在可能的情況,你做架構/數據發生變化時,考慮到與目前公佈的源帳戶的兼容性。

這種方式可以使一個訴簡單的工具,運行致力於特定的svn目錄(你不想對數據庫的變化差異,因爲如果你需要進一步的修改,你需要不同的語句)數據庫腳本。

通過上述操作後,可以有運行數據庫的更改,那麼二進制&修改源代碼的簡單命令。

對於數據庫還有的架構&數據比較工具的選項,這些可以被用來比較&確保有沒有什麼意外的更改腳本缺少環境 - 也可能產生變化的腳本,但我說你真的想確保它不會打破當前的來源。

0

您可以創建一個工具輕鬆地進行遷移 - 類似於Peoplesoft的補丁升級助手。

它基本上是一個獨立的可執行文件,它讀取「升級模板」並執行任務。升級模板以聲明方式描述升級任務或「步驟」。這些步驟可以是 - 複製(用於備份或移動類和othar二進制文件等預編譯對象),數據庫(用於更改模式元素),SQL腳本(用於加載或轉換當前數據)。這些步驟將具有一些謂詞邏輯能力 - 如果是這樣,請執行此操作,否則跳過它並轉到下一步等。

該模板通常是一個XML文件。它還提供手動步驟和手動操作說明。每一步還指定它是否可恢復。它也會驗證步驟是否成功。

圍繞這個需求開放源代碼項目是很常見的。

+0

@ srini.venigalla,至今爲止您的答案與我所尋找的最接近。我想知道這樣的工具是否已經存在,是否開源。我認爲需要這種開源工具。我一直在考慮如何生成數據庫模式和內容數據差異以用於這種工具。你對這個主題有什麼想法嗎? – 2009-11-27 17:51:07

+1

@ srini.venigalla你正在描述debian包裝系統:)。升級模板是一個rules.xml,你可以在每種情況下說出要做什麼(安裝,更新,卸載...) – 2009-11-30 11:32:10

+0

嗯..我主要是Windows的傢伙。只需轉移到Mac。與Ubuntu和Mac端口混在一起,但與Debian差不多。將Debian的這個子系統創建爲一個通用的軟件包會很好!我很想多次構建一個這樣的工具,但從未聽過更高級的調用:-) – 2009-12-03 01:39:20

0

您需要將git commit對象保存在本地文件中,然後將它們導入到其他repo /分支中。