cd返回上一 git_PHP项目中应用CI/CD的碎碎恋!
點(diǎn)擊上方“架構(gòu)藝術(shù)”,每日干貨!
作者:晶晶
原文鏈接:https://blog.jjonline.cn/linux/239.html
DevOps漫談:談一談在PHP項(xiàng)目如何應(yīng)用CI/CD提升開發(fā)效率和規(guī)范開發(fā)與發(fā)布以及運(yùn)維、運(yùn)營之間的平衡。既然是漫談就無法做到完全的無誤,各位看官權(quán)當(dāng)一種思路,拋磚引玉了。點(diǎn)擊最下方關(guān)鍵詞可以查找該系列的文章。
DevOps是一種方法論,是一組過程、方法與系統(tǒng)的統(tǒng)稱。那么DevOps在PHP中的應(yīng)用其實(shí)就是這一整套方法論在PHP上的實(shí)現(xiàn)和流程化,最終達(dá)到在PHP項(xiàng)目上DevOps理論需實(shí)現(xiàn)的目標(biāo)---促進(jìn)開發(fā)、運(yùn)維和測試(QA)多部門之間的溝通、協(xié)作與整合,打破傳統(tǒng)開發(fā)和運(yùn)營之間的壁壘和鴻溝。結(jié)合PHP項(xiàng)目的特點(diǎn),以下做一些PHP項(xiàng)目中應(yīng)用CI/CD的流程(Pipeline)分析。
CI/CD碎碎戀
什么是CI/CD系列一文章已經(jīng)咬文嚼字的介紹過,會意就好,這里再補(bǔ)充兩張圖。
上圖分3個(gè)區(qū)塊,即CI/CD的宏觀流程,為了形象呈現(xiàn)這里的兩個(gè)CD拆分開了,查找了不少資料發(fā)現(xiàn)在具體的DevOps實(shí)踐中將兩個(gè)CD合并成了1個(gè)步驟(節(jié)點(diǎn)或要點(diǎn))來理解更為便捷。整個(gè)流程中一直有一個(gè)關(guān)鍵詞Automation,也就是自動。約莫的拿這張圖分析下CI/CD
1、左側(cè)為CI(Continuous Integration)的內(nèi)容
源碼和版本控制(SCM)下開發(fā)者提交代碼,并自動觸發(fā)服務(wù)端的源碼構(gòu)建,CI服務(wù)器觸發(fā)Build過程和運(yùn)行測試(不局限與單元測試,各種代碼質(zhì)量保證的測試均包含)。似乎有點(diǎn)兒繞來繞去的還有專業(yè)名詞,云里霧里的感jio,簡單的描述即開發(fā)者提交代碼到git或svn上,自動觸發(fā)源碼的構(gòu)建(Build)、集成(Integration)及各種測試(Test)。這里的SCM即Software Configuration Management的簡寫,一直以來我以為SCM指的是Source Code/Control Management,其實(shí)也差不多啦,就是源碼、版本控制工具,例如:svn、git都是SCM的一種(蔬菜是SCM,胡蘿卜是git、白蘿卜是svn來理解啦,是那么個(gè)意思就好);這里的Build和Integration不同的編程語言里可以理解成各自不同的動作,傳統(tǒng)的C/C++項(xiàng)目乃至java項(xiàng)目均有Build過程,大致理解是那個(gè)意思即可,就是從源碼構(gòu)造成二進(jìn)制程序或源碼與二進(jìn)制文件之間的中間形式文件的過程,PHP項(xiàng)目是不需要Build過程的,不過可以借用Build這種概念做一些準(zhǔn)備性的“構(gòu)建”動作。
2、中間CD持續(xù)交付(Continuous Delivery)的內(nèi)容
CI之后Release(釋出、推出、生成)可發(fā)布的軟件或包,交付給客戶或?qū)⒖蓤?zhí)行程序deploy到各種環(huán)境中,這里的deploy很讓人迷惑,若要咬文嚼字的話理解成“部署”是不夠精確的,若真要較留一段英文解釋吧,這個(gè)靠悟性了。
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)是“分散或策略性地安排”。它長期用于軍事戰(zhàn)略,現(xiàn)在已經(jīng)在信息技術(shù)方面獲得了成功。在IT領(lǐng)域中,部署包括在其環(huán)境中正常啟動和運(yùn)行新軟件或硬件所涉及的所有過程,包括安裝,配置,運(yùn)行,測試和進(jìn)行必要的更改。實(shí)施這個(gè)詞有時(shí)用來表示同樣的事情。
3、右邊CD持續(xù)部署(Continuous Deployment)的內(nèi)容
這個(gè)就不難理解了,自動化的部署到預(yù)發(fā)、生產(chǎn)環(huán)境,或發(fā)布給公共開放的用戶們使用。因?yàn)槌掷m(xù)部署的概念中突出了部署到正式環(huán)境中,很多時(shí)候?qū)Τ掷m(xù)交付的理解就成了持續(xù)交付給內(nèi)部的非開發(fā)團(tuán)隊(duì),譬如質(zhì)量保障、QA等做內(nèi)部測試用。所以很多時(shí)候說CI/CD的時(shí)候,里面的CD是不會做詳細(xì)的進(jìn)一步區(qū)分的,就是持續(xù)交付和持續(xù)部署兩個(gè)詞的含義。
另外一張圖,里面的CD就沒有再進(jìn)一步區(qū)分了,看看就好。
PHP用應(yīng)用CI/CD的思考
CI/CD的內(nèi)涵和外延太廣泛了,各人的理解又是有各種差異和各自亮點(diǎn)的,不必糾結(jié)于咬文嚼字。
PHP的腳本語言的天然特性,使得開發(fā)者編碼完畢無需Build編譯的過程,文件復(fù)制拷貝到web目錄下,請求一下就可以立即看到開發(fā)的結(jié)果。那么PHP這種便捷性之下,CI/CD還有存在的必要性么?
在CI/CD理論的實(shí)踐中,都是作為一些連續(xù)的、自動的步驟來處理的。查閱相關(guān)英文資料時(shí)常會看到Pipeline這個(gè)詞匯,直白的翻譯就是管道,這個(gè)詞在英文中還是一個(gè)動詞屬性--傳遞途徑,不做多的分析,上圖所示整個(gè)CI/CD實(shí)現(xiàn)的流程像不像一個(gè)自來水流動的管道?是那么個(gè)意思就好。
那么對于PHP項(xiàng)目如何應(yīng)用CI/CD呢?
以下是個(gè)人的一些思考。
1、代碼的版本控制和運(yùn)行環(huán)境統(tǒng)一
這個(gè)無需多言,許多團(tuán)隊(duì)開發(fā)的項(xiàng)目中經(jīng)常遇到各種坑和麻煩,集中統(tǒng)一的代碼版本管理工具大多都已使用上了。
代碼管理基本上就是二選一:svn或git。當(dāng)然還有其他類型的工具,大多時(shí)候可能就是git了,git本身就是分布式的,沒有過多的權(quán)限和功能限定的話git本身的分布式就夠了,當(dāng)然還有有免費(fèi)開源的功能強(qiáng)大的gitlab,如果不是私有項(xiàng)目github、gitee都是可以的。
運(yùn)行環(huán)境統(tǒng)一這個(gè),似乎很少有團(tuán)隊(duì)涉及到,因?yàn)楦鱾€(gè)開發(fā)者的系統(tǒng)可能是不一樣的,也很難做到限定,不過條件允許的情況下統(tǒng)一開發(fā)、測試和生產(chǎn)各運(yùn)行運(yùn)行環(huán)境也是必要的。現(xiàn)在虛擬化、容器化技術(shù)也不斷顯現(xiàn)威力,合理利用這些技術(shù)實(shí)現(xiàn)運(yùn)行時(shí)環(huán)境的統(tǒng)一并不是什么難事兒,就算是傳統(tǒng)的安裝方式,提供統(tǒng)一的安裝腳本或統(tǒng)一的安裝說明都是一種進(jìn)步。對于PHP項(xiàng)目來說,統(tǒng)一的運(yùn)行環(huán)境無非PHP版本和擴(kuò)展以及配置項(xiàng)、MySQL版本和配置項(xiàng)、Web服務(wù)器的選擇和配置等等。
2、代碼風(fēng)格檢查和規(guī)范和自動化單元測試(Unit Test)
PHP的腳本語言特性導(dǎo)致了編碼風(fēng)格的多樣性和編碼習(xí)慣的豐富多彩,對于編碼風(fēng)格哪種更為優(yōu)雅其實(shí)沒必要爭論,這方面Go語言做的很好,直接官方提供統(tǒng)一的編碼排版工具,大有“誰也別爭,按我的要求來就好”的意味,也確實(shí)解決了不少沒必要的爭論和精力消耗。
PHP的編碼規(guī)范有一個(gè)PHP-FIG組織提的PSR規(guī)范,本著聊勝于無的原則,團(tuán)隊(duì)統(tǒng)一遵循即可。也有各種實(shí)現(xiàn)了這些規(guī)范的自動排版和檢查的工具如:CodeSniffer、PHP-CS-Fixer等
關(guān)于PHP里的單元測試,近幾年似乎更多的是偏向于QA層面的,PHP里也是有發(fā)源于Junit的phpunit的,關(guān)于單元測試這塊兒,因?yàn)椴簧婕皹I(yè)務(wù)的開發(fā),僅僅是對所開發(fā)的代碼的一種自動化按單元執(zhí)行的測試代碼的開發(fā),還存在一些誤解和作用性上面的空白。有一個(gè)新的崗位叫:測試開發(fā)工程師簡稱測開,據(jù)說比普通的碼畜待遇要好很多。
3、自動化部署至開發(fā)、測試環(huán)境進(jìn)一步測試和驗(yàn)證
這一塊有很多可用的方案和工具,Jenkins、Travis-CI以及Gitlab提供的CI/CD等等,核心在于選擇哪一種工具并合理配置運(yùn)行起來。這一塊兒工具已經(jīng)很多,而且大多都是完整或不僅僅實(shí)現(xiàn)了CI/CD功能的。選擇團(tuán)隊(duì)最佳和最熟悉的工具即可,實(shí)現(xiàn)自動化的環(huán)境構(gòu)建、部署和依賴測試等等。對于PHP項(xiàng)目來說,大多時(shí)候環(huán)境都是提前搭建好的,這塊兒可能更多就是部署測試代碼和自動化測試;當(dāng)然大型分布式的從申請新的機(jī)器到機(jī)器環(huán)境搭建、代碼部署和進(jìn)入集群開始服務(wù)整個(gè)流程本身也是包含在CI/CD的理念里的,所以怎么用如何用其實(shí)還是具備很大的傾向性和喜好在里面的。
4、可選的自動化部署至生產(chǎn)環(huán)境
這其實(shí)是傳統(tǒng)開發(fā)過程中的統(tǒng)一部署和發(fā)布,這方面的工具Jenkins應(yīng)用的最多,國人開發(fā)的瓦力部署系統(tǒng)也有不少團(tuán)隊(duì)使用,更多的大廠以定制開發(fā)的工具居多。
對于沒有完整實(shí)踐經(jīng)驗(yàn)的開發(fā)團(tuán)隊(duì)而言,不可能完整的實(shí)現(xiàn)CI/CD的理念的,至少在PHP項(xiàng)目上當(dāng)前是不可能的,所以自動部署至生產(chǎn)環(huán)境本文作為可選項(xiàng)。絕大多數(shù)時(shí)候部署至生產(chǎn)環(huán)境俗稱“發(fā)版”,你見過哪家公司敢在最終線上部署這一步完整實(shí)踐CI/CD理念的么?頂多用上一套部署系統(tǒng),開發(fā)、測試、運(yùn)維各方均沒有問題的時(shí)候,手動去觸發(fā)執(zhí)行自動部署。所以說人是不可靠的,也是可靠的。
-----
參考資料:
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
總結(jié)
以上是生活随笔為你收集整理的cd返回上一 git_PHP项目中应用CI/CD的碎碎恋!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: json key 命名规范_jsonap
- 下一篇: php权限二进制,了解二进制权限,二进制