二月 4, 2017 | 後端和Drupal

用Features來建立Drupal多人協同開發流程-概念篇

Drupal的彈性是眾多工程師最津津樂道的。但由於所有的設定,幾乎都是存在資料庫內。因此,往往當多人一起開發時,必須要同時於一個網站上面進行“設定”,不僅容易出錯,也需要時時刻刻重新設定或解決不同開發者之間的設定問題。Features模組即是在Drupal開發流程中,扮演最重要的角色。有了Features為Based的Drupal網站,協同開發網站上,將會更安全也更快速。

前言

Drupal的彈性是眾多工程師最津津樂道的。但由於所有的設定,幾乎都是存在資料庫內。因此,往往當多人一起開發時,必須要同時於一個網站上面進行“設定”,不僅容易出錯,也需要時時刻刻重新設定或解決不同開發者之間的設定問題。Features模組即是在Drupal開發流程中,扮演最重要的角色。有了Features為Based的Drupal網站,協同開發網站上,將會更安全也更快速。

現況

Drupal工程師的痛,你中了幾項呢?這篇文章中,有提到幾點目前常見到的Drupal開發上的問題。

  1. 單打獨鬥真的開心嗎?
    無法多人真的協同合作,同時開發網站。主要原因是,Drupal的開發與設定,都在資料庫內。每當兩個以上的工程師想要一起開發的時候,只能夠同時設定一台Drupal網站,若真的出事了,每次的Restore網站,都會造成部份工程師的設定Lost或做白工。

  2. Live Testing & Live Setting
    在開發階段,工程師都會做無數次的備份,避免不小心,造成程式或設定消失的悲劇發生。但是都僅止於「開發階段」。網站真的上線之後,該如何?真的可以到線上設定嗎?若設定錯了,難道也要還原?那在這段期間內的所有Data的寫入,該怎麼辦呢?

  3. 如何驗證程式的正確性?

  4. 程式如何同步與更新?

  5. 時間才是最大的問題

Features:打通任督二脈的重要工具

前面鋪陳了許久,重點還是解決之道。模組Features是目前下載排行的前面幾名(約30萬個網站使用),為何這麼多人使用呢?從模組的首頁來看,可以得知:

“Features provides a UI and API for taking different site building components from modules with exportables and bundling them together in a single feature module. A feature module is like any other Drupal module except that it contains additional information in its info file so that configuration can be checked, updated, or reverted programmatically.”

簡單來說,就是他可以把Drupal的設定,打包成一個一個的模組,並且這些模組有個特性可以拿來檢測(Checked)、更新(Update)、還原(Reverted)。 看到這裡,是否有眼睛為之一亮的感覺出來了呢?

特色:

  1. 不同環境之間的設定完美同步
    在開發Drupal網站的過程當中,在不同環境內(開發環境、正式環境)搬移設定是很重要的事情,多種模組即使有提供Export/Import功能,但是還是要花上太多的時間進行驗證與處理。當面臨大型功能要搬移設定的時候,將會是Developer最頭痛的事情。而Features可以完美的解決這一點。將開發出來功能設定進行打包,並且更新到Stage環境甚至Production環境,再利用還原(Reverted)的功能,將本地開發的功能更新到測試或正式環境上面。可以省下不少時間,並且同步不同環境的所有設定。

  2. 功能Code化&&版本控制
    前面的介紹提到,Features的功能是將網站的設定,進行打包,變成模組。自然而然,就是將本來寄存在資料庫的設定,變成Code。提到這裡,是否您跟小編一樣興奮呢?沒錯,能夠將設定Code化,就代表我們可以進行Drupal功能的各種版本控制(Git)、並且來進行各種開發並且整合。這裡官方當然也有一篇介紹文章,說明如何將Drupal與Git整合到Drupal的開發流程之中。

  3. 用Features後台,管控整體網站的更新狀況
    在開發完畢後,通過Features來更新與同步環境,該如何來確定網站的設定狀況呢?Features的UI提供了全部打包功能的列表與狀況。

  • 所有Features的列表(下圖為本網站正式環境的Featuers List)
  • 任選一個Features模組進行的畫面
  1. Features與Drush進行整合
    若是Drupal的深度開發者,相信對於Drush都不陌生,若您不了解也沒有關係,可以參考這篇文章:Drupal 的好朋友 Drush 外掛,讓你管理 Drupal 有一套[Linux版]

通過Drush可以加快Features的功能,但由於本篇只想要介紹概念,所以這裡就稍微留個伏筆,留在下一篇再進行討論。

運用Features特性建立多人開發流程

觀看完上述的Features功能之後,該如何在團隊內部執行是個很重要的議題,以下流程給有興趣的大家,進行參考

開發流程

  • Step1:建立相同的開發環境/同步本機環境與線上環境一致
    於本機環境,將目前的線上Drupal網站同步到自己的本機環境,同步下來時要確保自己的環境與線上端是一致的

  • Step2:於Local端進行開發
    在本機環境同樣進行各種功能的開發與設定,舉例來說:建立一個最新消息的文章類型。當然這個時候的設定,都會存在資料庫內。

  • Step3:打包
    將設定利用Features打包,變成Features做出來的模組(將設定DB_A002打包成Code_A002)

  • Step4:驗證程式的正確性
    工程師將本機的資料庫還原成跟線上端一樣,然後此Features的模組,通過Features的還原(Reverted)功能驗證是否可以真的產生出這次開發的功能(DB_A002)。

  • Step5:上傳程式Branch,並發佈Merge Request
    若工程師發現模組沒有問題,則發佈Merge Request到主線。

  • Step6:專案負責人驗證Branch,無誤後Merge,並且於伺服器進行更新作業
    專案負責人,一樣先於自己的Local端,進行同步線上作業並且檢查工程師發佈的這個分支,是否功能正常,若確定正常,將可以合併分支,並且於線上端進行更新作業。

  • Step7:同步本機環境與線上環境,並且重複此流程

上述的流程,不僅不會再有任何多人協同合作上面的限制,還可以利用Features的優點,將設定同步到不同的環境上,不僅可以確保開發上的安全與穩定,更能夠做好版本控制,降低開發上的成本。

結論

由於Features的特性,我們可以初步的建立一個多人協作的開發過程,並且進行版本控制。未來就不會再有之前小編寫到的一些開發上的問題了。實在是很令人興奮是吧~笑~

當然,由於開發一個Drupal網站不僅僅只有Drupal本身而已,伺服器環境配置、Git Repo設置...到底該如何"實作",是一個重要的議題,小編就留到下一篇再分享,若您是用Drupal8在開發,也可以參考一下這篇文章:What's new in Features for Drupal 8?

最後埋個伏筆,有了好的開發流程,是否有機會將Drupal的開發流程導入持續整合(Continuous integration)呢? 若大家有什麼想法,也歡迎在此討論 :)