Upgrade to Pro — share decks privately, control downloads, hide ads and more …

從 Legacy 到 Lovely,用 CI/CD 改建二十年祖產全記錄

從 Legacy 到 Lovely,用 CI/CD 改建二十年祖產全記錄

於 Laravel x Vue Conf Taiwan 2022 的演講簡報,主要描述一個多年的 Legacy 專案如何慢慢的演變為現代化框架為基底的專案過程。

mouson(墨嗓)

December 03, 2022
Tweet

More Decks by mouson(墨嗓)

Other Decks in Programming

Transcript

  1. 從 Legacy 到 Lovely 陳佑⽵ aka. 墨嗓 @Laravel & Vue

    Conf Taiwan ⽤ CI/CD 改建⼆⼗年祖產全記錄
  2. • 陳佑⽵,朋友都叫我墨嗓 Mouson • GitLab Hero • 資深系統分析師 • GitLab

    Taipei User Group / DevOps Taiwan / Laravel Taiwan 志⼯ • [email protected] • https://gitlab.com/mo-playground • https://gitlab.com/mouson About Me
  3. • ⾯對它 • 接受它 • 處理它 • 放下它 該怎麼處理 Legacy?

    重構或重寫 Legacy code 的幾個階段 https://jaceju.net/steps-of-refactoring-or-rebuilding/
  4. PHP 4 我們的版本 - ⾯對它 • Apache 1.3 • PHP

    4.1.2 • 核⼼為使⽤ C 編寫之 PHP Extension • PHP 程式碼超過千隻 PHP 程式 • LoC 超過 20 萬⾏(僅PHP) • 版本控制(CVS)服務損毀 • 非 PHP 原始碼遺落或不完整 • 使⽤非常⾒的商⽤資料庫 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 4 1.3 4.1.2
  5. Part 1 - 接受它 • 建立 Issue Tracking System •

    建立版本控制系統 • The One DevOps Platform
  6. Part 1 - 接受它 • 建立 Issue Tracking System •

    建立版本控制系統 • The One DevOps Platform • 建立研發團隊⼯作流程
  7. Part 1 - 處理它 PHP 4 Native Custom Extension PHP

    Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 4 1.3 4.1.2 PHP 5 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 2.2 5.2.17
  8. Part 1 - 接受它 • 藉此更了解系統結構、架構 • 初步升級 PHP 5.2.17

    及核⼼元件 • 依然沒有 namespace • 依然沒有 Composer Package 可以⽤
  9. Part 2 - 處理它 • 導入單元測試,以測試描述規格 • 寫 PHP 5.2

    與 PHP 5.6 相容的語法 • 導入 TDD 進⾏新功能開發
  10. Part 2 - 處理它 • 導入單元測試,以測試描述規格 • 寫 PHP 5.2

    與 PHP 5.6 相容的語法 • 導入 TDD 進⾏新功能開發 • 持續針對重要核⼼演算法重構、補上測試
  11. Part 2 - 處理它 • 導入單元測試,以測試描述規格 • 寫 PHP 5.2

    與 PHP 5.6 相容的語法 • 導入 TDD 進⾏新功能開發 • 持續針對重要核⼼演算法重構、補上測試 • 透過 GitLab 的 CI/CD 功能加入⾃動化測試
  12. Part 2 - 處理它 • 持續累積研發團隊(2.5P) Credit • 錯了代表以測試所描述的規格還不夠完整 •

    補測試後就不會再錯,不再改 A 壞 B • 可能不是程式寫錯,⽽ 是使⽤端設定錯誤 • 程式⼜算錯了!
  13. PHP 5 Native Custom Extension PHP Extension Custom Software 6

    Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 2.2 5.2.17 Part 3 - ⾯對它 - 下⼀⽬標? PHP 7.3 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3
  14. PHP 7.3 Native Custom Extension PHP Extension Custom Software 6

    Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3 Part 3 - ⾯對它 - 下⼀⽬標? • 升級 PHP 到 PHP 7 • 導入 ORM • 如果可能導入 Laravel 作 為後端核⼼ • 作業系統升級 • 資料庫版本升級
  15. PHP 7.3 Native Custom Extension PHP Extension Custom Software 6

    Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3 Part 3 - ⾯對它 - 下⼀⽬標? • 升級 PHP 到 PHP 7 • 導入 ORM • 如果可能導入 Laravel 作 為後端核⼼ • 作業系統升級 • 資料庫版本升級
  16. Part 3 - ⾯對它 - 升級 PHP 7.3 • Use

    Register Global 問題 • PHP 7.3 語法相容 • Custom Extension PHP 7.3 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3
  17. Part 3 - 處理它 - 升級 PHP 7.3 • Custom

    Extension • 以 TDD 的⽅法重建 Extension • ⼤部分直接以 PHP 直接重寫 • 少量 PHP Extension
  18. Part 3 - 處理它 - 升級 PHP 7 • PHP

    7.3 語法相容調整 • 透過 PHPCompatibility 產出報告逐⼀修正 • https://github.com/PHPCompatibility • mcrypt 語法移除:改寫
  19. PHP 7.3 Native Custom Extension PHP Extension Custom Software 6

    Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3 下⼀⽬標? PHP 7.4 Native Custom Extension PHP Extension Software Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8
  20. Part 4 - 導入 Laravel 需要? • 使 Laravel ⽀援

    DBMaker • 非 Laravel 架構的原始碼處 置 • 檔案上傳儲存機制調整 PHP 7.4 Native Custom Extension PHP Extension Software Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8
  21. Part 4 - 使 Laravel ⽀援 DBMaker • 使 Eloquent

    能夠⽀援 DBMaker,建立 Eloquent Driver
  22. Part 4 - 使 Laravel ⽀援 DBMaker • 使 Eloquent

    能夠⽀援 DBMaker,建立 Eloquent Driver https://mouson.im/Publication/PHP/20170701-laravelconf-taiwan-2017-eloquent-destruct/
  23. Part 8 - 持續改善 PHP 4 Native Custom Extension PHP

    Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 4 1.3 4.1.2
  24. Part 8 - 持續改善 PHP 4 Native Custom Extension PHP

    Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 4 1.3 4.1.2 PHP 5 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 2.2 5.2.17
  25. Part 8 - 持續改善 PHP 4 Native Custom Extension PHP

    Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 4 1.3 4.1.2 PHP 5 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 2.2 5.2.17 PHP 7.3 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3
  26. Part 8 - 持續改善 PHP 4 Native Custom Extension PHP

    Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 4 1.3 4.1.2 PHP 5 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 2.2 5.2.17 PHP 7.3 Native Custom Extension PHP Extension Custom Software 6 Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.1 .3 PHP 7.4 Native Custom Extension PHP Extension Software Database Project Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8
  27. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 Part 8 - 持續改善
  28. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 Part 8 - 持續改善 • ⼤型範圍重構需⼀點⼀滴 的改善及累積
  29. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 Part 8 - 持續改善 • ⼤型範圍重構需⼀點⼀滴 的改善及累積 • ⼤⽬標需要切割成⼩⽬標
  30. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 Part 8 - 持續改善 • ⼤型範圍重構需⼀點⼀滴 的改善及累積 • ⼤⽬標需要切割成⼩⽬標 • 團隊需要有共識的作取捨
  31. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 Part 8 - 持續改善 • ⼤型範圍重構需⼀點⼀滴 的改善及累積 • ⼤⽬標需要切割成⼩⽬標 • 團隊需要有共識的作取捨 • 如果可能,重構要盡早
  32. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 Part 8 - 持續改善 • ⼤型範圍重構需⼀點⼀滴 的改善及累積 • ⼤⽬標需要切割成⼩⽬標 • 團隊需要有共識的作取捨 • 如果可能,重構要盡早
  33. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 我們的下⼀⽬標?
  34. PHP 7.4 Native Custom Extension PHP Extension Software Database Project

    Backend Frontend HTML, JavaScript, PHP ODBC Driver 5.4 .4 8 我們的下⼀⽬標? PHP 8.2 Native Custom Extension PHP Extension Software Project Backend Frontend HTML, JavaScript, PHP ODBC Driver .2 9
  35. Summary https://twitter.com/markbrooks/status/1573286323515170816/photo/1 願景 Vision 技能 Skills 誘因 Incentives 資源 Resources

    ⾏動計畫 Action Plan 改變 Change 技能 誘因 資源 ⾏動計畫 困惑 Confusion 願景 誘因 資源 ⾏動計畫 焦慮 Anxiety 願景 技能 資源 ⾏動計畫 抵抗 Resistance 願景 技能 誘因 ⾏動計畫 挫折 Frustration 願景 技能 誘因 資源 ⼀開始就失敗 False Starts • 願景、技能、誘因、資 源、⾏動計畫,形成改變 • 沒有「願景」會造成困惑 • 沒有「技能」會令⼈焦慮 • 沒有「誘因」會讓⼈抵抗 • 沒有「資源」會使⼈挫折 • 沒有「⾏動計畫」則⼀開 始就失敗
  36. Q&A