cd返回上一 git_PHP项目中应用CI/CD的碎碎恋!
點擊上方“架構藝術”,每日干貨!
作者:晶晶
原文鏈接:https://blog.jjonline.cn/linux/239.html
DevOps漫談:談一談在PHP項目如何應用CI/CD提升開發效率和規范開發與發布以及運維、運營之間的平衡。既然是漫談就無法做到完全的無誤,各位看官權當一種思路,拋磚引玉了。點擊最下方關鍵詞可以查找該系列的文章。
DevOps是一種方法論,是一組過程、方法與系統的統稱。那么DevOps在PHP中的應用其實就是這一整套方法論在PHP上的實現和流程化,最終達到在PHP項目上DevOps理論需實現的目標---促進開發、運維和測試(QA)多部門之間的溝通、協作與整合,打破傳統開發和運營之間的壁壘和鴻溝。結合PHP項目的特點,以下做一些PHP項目中應用CI/CD的流程(Pipeline)分析。
CI/CD碎碎戀
什么是CI/CD系列一文章已經咬文嚼字的介紹過,會意就好,這里再補充兩張圖。
上圖分3個區塊,即CI/CD的宏觀流程,為了形象呈現這里的兩個CD拆分開了,查找了不少資料發現在具體的DevOps實踐中將兩個CD合并成了1個步驟(節點或要點)來理解更為便捷。整個流程中一直有一個關鍵詞Automation,也就是自動。約莫的拿這張圖分析下CI/CD
1、左側為CI(Continuous Integration)的內容
源碼和版本控制(SCM)下開發者提交代碼,并自動觸發服務端的源碼構建,CI服務器觸發Build過程和運行測試(不局限與單元測試,各種代碼質量保證的測試均包含)。似乎有點兒繞來繞去的還有專業名詞,云里霧里的感jio,簡單的描述即開發者提交代碼到git或svn上,自動觸發源碼的構建(Build)、集成(Integration)及各種測試(Test)。這里的SCM即Software Configuration Management的簡寫,一直以來我以為SCM指的是Source Code/Control Management,其實也差不多啦,就是源碼、版本控制工具,例如:svn、git都是SCM的一種(蔬菜是SCM,胡蘿卜是git、白蘿卜是svn來理解啦,是那么個意思就好);這里的Build和Integration不同的編程語言里可以理解成各自不同的動作,傳統的C/C++項目乃至java項目均有Build過程,大致理解是那個意思即可,就是從源碼構造成二進制程序或源碼與二進制文件之間的中間形式文件的過程,PHP項目是不需要Build過程的,不過可以借用Build這種概念做一些準備性的“構建”動作。
2、中間CD持續交付(Continuous Delivery)的內容
CI之后Release(釋出、推出、生成)可發布的軟件或包,交付給客戶或將可執行程序deploy到各種環境中,這里的deploy很讓人迷惑,若要咬文嚼字的話理解成“部署”是不夠精確的,若真要較留一段英文解釋吧,這個靠悟性了。
To deploy (from the French deployer)is"to spread out or arrange strategically."Long used in the context of military strategy, it has now gained currency in information technology.In its IT context, deployment encompasses all the processes involved in getting new software or hardware up and running properly in its environment, including installation, configuration, running, testing,and making necessary changes.The word implementation is sometimes used to mean the same thing.
-----
谷歌的半吊子翻譯如下:
部署(來自法語中的deployer)是“分散或策略性地安排”。它長期用于軍事戰略,現在已經在信息技術方面獲得了成功。在IT領域中,部署包括在其環境中正常啟動和運行新軟件或硬件所涉及的所有過程,包括安裝,配置,運行,測試和進行必要的更改。實施這個詞有時用來表示同樣的事情。
3、右邊CD持續部署(Continuous Deployment)的內容
這個就不難理解了,自動化的部署到預發、生產環境,或發布給公共開放的用戶們使用。因為持續部署的概念中突出了部署到正式環境中,很多時候對持續交付的理解就成了持續交付給內部的非開發團隊,譬如質量保障、QA等做內部測試用。所以很多時候說CI/CD的時候,里面的CD是不會做詳細的進一步區分的,就是持續交付和持續部署兩個詞的含義。
另外一張圖,里面的CD就沒有再進一步區分了,看看就好。
PHP用應用CI/CD的思考
CI/CD的內涵和外延太廣泛了,各人的理解又是有各種差異和各自亮點的,不必糾結于咬文嚼字。
PHP的腳本語言的天然特性,使得開發者編碼完畢無需Build編譯的過程,文件復制拷貝到web目錄下,請求一下就可以立即看到開發的結果。那么PHP這種便捷性之下,CI/CD還有存在的必要性么?
在CI/CD理論的實踐中,都是作為一些連續的、自動的步驟來處理的。查閱相關英文資料時常會看到Pipeline這個詞匯,直白的翻譯就是管道,這個詞在英文中還是一個動詞屬性--傳遞途徑,不做多的分析,上圖所示整個CI/CD實現的流程像不像一個自來水流動的管道?是那么個意思就好。
那么對于PHP項目如何應用CI/CD呢?
以下是個人的一些思考。
1、代碼的版本控制和運行環境統一
這個無需多言,許多團隊開發的項目中經常遇到各種坑和麻煩,集中統一的代碼版本管理工具大多都已使用上了。
代碼管理基本上就是二選一:svn或git。當然還有其他類型的工具,大多時候可能就是git了,git本身就是分布式的,沒有過多的權限和功能限定的話git本身的分布式就夠了,當然還有有免費開源的功能強大的gitlab,如果不是私有項目github、gitee都是可以的。
運行環境統一這個,似乎很少有團隊涉及到,因為各個開發者的系統可能是不一樣的,也很難做到限定,不過條件允許的情況下統一開發、測試和生產各運行運行環境也是必要的。現在虛擬化、容器化技術也不斷顯現威力,合理利用這些技術實現運行時環境的統一并不是什么難事兒,就算是傳統的安裝方式,提供統一的安裝腳本或統一的安裝說明都是一種進步。對于PHP項目來說,統一的運行環境無非PHP版本和擴展以及配置項、MySQL版本和配置項、Web服務器的選擇和配置等等。
2、代碼風格檢查和規范和自動化單元測試(Unit Test)
PHP的腳本語言特性導致了編碼風格的多樣性和編碼習慣的豐富多彩,對于編碼風格哪種更為優雅其實沒必要爭論,這方面Go語言做的很好,直接官方提供統一的編碼排版工具,大有“誰也別爭,按我的要求來就好”的意味,也確實解決了不少沒必要的爭論和精力消耗。
PHP的編碼規范有一個PHP-FIG組織提的PSR規范,本著聊勝于無的原則,團隊統一遵循即可。也有各種實現了這些規范的自動排版和檢查的工具如:CodeSniffer、PHP-CS-Fixer等
關于PHP里的單元測試,近幾年似乎更多的是偏向于QA層面的,PHP里也是有發源于Junit的phpunit的,關于單元測試這塊兒,因為不涉及業務的開發,僅僅是對所開發的代碼的一種自動化按單元執行的測試代碼的開發,還存在一些誤解和作用性上面的空白。有一個新的崗位叫:測試開發工程師簡稱測開,據說比普通的碼畜待遇要好很多。
3、自動化部署至開發、測試環境進一步測試和驗證
這一塊有很多可用的方案和工具,Jenkins、Travis-CI以及Gitlab提供的CI/CD等等,核心在于選擇哪一種工具并合理配置運行起來。這一塊兒工具已經很多,而且大多都是完整或不僅僅實現了CI/CD功能的。選擇團隊最佳和最熟悉的工具即可,實現自動化的環境構建、部署和依賴測試等等。對于PHP項目來說,大多時候環境都是提前搭建好的,這塊兒可能更多就是部署測試代碼和自動化測試;當然大型分布式的從申請新的機器到機器環境搭建、代碼部署和進入集群開始服務整個流程本身也是包含在CI/CD的理念里的,所以怎么用如何用其實還是具備很大的傾向性和喜好在里面的。
4、可選的自動化部署至生產環境
這其實是傳統開發過程中的統一部署和發布,這方面的工具Jenkins應用的最多,國人開發的瓦力部署系統也有不少團隊使用,更多的大廠以定制開發的工具居多。
對于沒有完整實踐經驗的開發團隊而言,不可能完整的實現CI/CD的理念的,至少在PHP項目上當前是不可能的,所以自動部署至生產環境本文作為可選項。絕大多數時候部署至生產環境俗稱“發版”,你見過哪家公司敢在最終線上部署這一步完整實踐CI/CD理念的么?頂多用上一套部署系統,開發、測試、運維各方均沒有問題的時候,手動去觸發執行自動部署。所以說人是不可靠的,也是可靠的。
-----
參考資料:
1、https://dzone.com/articles/learn-how-to-setup-a-cicd-pipeline-from-scratch
2、https://blog.docker.com/2018/02/ci-cd-with-docker-ee/
3、https://ithelp.ithome.com.tw/articles/10204538
4、https://gblogs.cisco.com/ch-tech/how-to-build-devops-cloud-agnostic-cicd-pipeline-prospect/
5、https://gblogs.cisco.com/ch-tech/cloud-agnostic-cicd-pipeline-for-devops-building-blocks/
6、https://gblogs.cisco.com/ch-tech/how-to-devops-cloud-agnostic-cicd-pipeline-process-steps/
7、http://www.zhujinhe.com/archives/31
總結
以上是生活随笔為你收集整理的cd返回上一 git_PHP项目中应用CI/CD的碎碎恋!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: json key 命名规范_jsonap
- 下一篇: 之全能忙内_临沧大名山茶:喝过诸多忙肺茶