DevOps與ci/cd簡介
什么是DevOps
DevOps(Development和Operations的組合詞)是一種重視“軟件開發(fā)人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化找爱、運動或慣例波俄。
透過自動化“軟件交付”和“架構變更”的流程,來使得構建蕴坪、測試菌赖、發(fā)布軟件能夠更加地快捷刨裆、頻繁和可靠饺鹃。
DevOps經常被描述為“開發(fā)團隊與運營團隊之間更具協(xié)作性、更高效的關系”条霜。由于團隊間協(xié)作關系的改善催什,整個組織的效率因此得到提升,伴隨頻繁變化而來的生產環(huán)境的風險也能得到降低宰睡。
AWS對DevOps模式做了一個完整的定義:
DevOps集文化理念蒲凶、實踐和工具于一身〔鹉冢可以提高組織交付應用程序和服務的能力旋圆。與使用傳統(tǒng)軟件和基礎設施管理流程相比,能夠幫助組織更快的發(fā)展和改進產品麸恍。這種速度使組織更好的服務其客戶灵巧,并在市場上高效的參與競爭。
簡單來說抹沪,DevOps希望做到的是軟件產品交付過程中IT工具鏈的打通刻肄,使得各個團隊減少時間損耗,更加高效地協(xié)同工作融欧。
DevOps發(fā)展階段
軟件行業(yè)的研發(fā)模式敏弃,可以發(fā)現(xiàn)大致有三個階段:瀑布式開發(fā)、敏捷開發(fā)噪馏、DevOps麦到。
DevOps的概念很早就有,但是為什么最近兩年才開始受到越來越多的企業(yè)重視和實踐呢欠肾?
因為現(xiàn)在有越來越多的技術支撐瓶颠。微服務架構理念、容器技術使得DevOps的實施變得更加容易刺桃,計算能力提升和云環(huán)境的發(fā)展使得快速開發(fā)的產品可以立刻獲得更廣泛的使用粹淋。
DevOps的實現(xiàn)可以基于新興的容器技術;也可以在自動化運維工具Puppet虏肾、SaltStack廓啊、Ansible之后的延伸;還可以構建在傳統(tǒng)的Cloud Foundry封豪、OpenShift等PaaS廠商之上谴轮。
DevOps的好處
最大的好處就是可以高效交付,這也正好是它的初衷吹埠。
Puppet和DevOps Research and Assessment (DORA) 主辦了2016年DevOps調查報告第步,根據全球4600位各IT公司的技術工作者的提交數據統(tǒng)計疮装,得出高效公司平均每年可以完成1460次部署。與低效組織相比粘都,高效組織的部署頻繁200倍廓推,產品投入使用速度快2555倍,服務恢復速度快24倍翩隧。在工作內容的時間分配上樊展,低效者要多花22%的時間用在為規(guī)劃好或者重復工作上,而高效者卻可以多花29%的時間用在新的工作上堆生。所以這里的高效不僅僅指公司產出的效率提高专缠,還指員工的工作質量得到提升。
對應用程序發(fā)布的影響
在很多企業(yè)中淑仆,應用程序發(fā)布是一項涉及多個團隊涝婉、壓力很大、風險很高的活動蔗怠。然而在具備DevOps能力的組織中墩弯,應用程序發(fā)布的風險很低,原因如下:
- 減少變更范圍
與傳統(tǒng)的瀑布式開發(fā)模型相比寞射,采用敏捷或迭代式開發(fā)意味著更頻繁的發(fā)布渔工、每次發(fā)布包含的變化更少。由于部署經常進行桥温,因此每次部署不會對生產系統(tǒng)造成巨大影響涨缚,應用程序會以平滑的速率逐漸生長。
- 加強發(fā)布協(xié)調
靠強有力的發(fā)布協(xié)調人來彌合開發(fā)與運營之間的技能鴻溝和溝通鴻溝策治;采用電子數據表、電話會議兰吟、即時消息通惫、企業(yè)門戶(wiki、sharepoint)等協(xié)作工具來確保所有相關人員理解變更的內容并全力合作混蔼。
- 自動化
強大的部署自動化手段確保部署任務的可重復性履腋、減少部署出錯的可能性。
應用發(fā)布流程
有的公司還會有預發(fā)布環(huán)境和灰度測試
什么是CI/CD惭嚣?
CI/CD包含兩個獨立而又互補的部分遵湖。
持續(xù)集成是指在應用代碼的新組件集成到共享存儲庫之后自動測試和構建軟件的流程。這樣一來晚吞,就可以打造出始終處于工作狀態(tài)的應用“版本”延旧。持續(xù)集成流程中納入了單元測試,因而可以驗證軟件的功能槽地。這樣可以提前識別錯誤迁沫,并避免反饋回路后期的周期浪費芦瘾。
持續(xù)交付是指將CI流程中創(chuàng)建的應用交付到類似生產環(huán)境的過程,在該過程中將對應用進行額外的自動化測試集畅,以確保應用在部署到生產環(huán)境以及交付到真實用戶手中時能夠發(fā)揮預期作用近弟。這樣還可以確保最新構建版本能夠以預期方式與其他軟件和應用交互。成功的CD意味著挺智,無論是通過自動化還是手動祷愉,構建版本都隨時可以部署到生產環(huán)境。
CI/CD的重要意義
- 基于業(yè)務要求按需部署軟件
采用CI/CD的團隊只需幾分鐘即可將新應用代碼部署到生產環(huán)境赦颇,并且可以在最符合業(yè)務需求的時候而不是按照預定的發(fā)布時間進行部署二鳄。
- 降低軟件在生產環(huán)境中無法正常運行的風險
采用CI/CD,代碼在交付之前會經過嚴密的自動化測試沐扳,從而大幅降低錯誤或問題代碼進入生產環(huán)境的風險泥从。
- 實現(xiàn)根據客戶反饋進行快速迭代
CI/CD優(yōu)化了敏捷方法和DevOps,它可以提供必要的功能沪摄,將向用戶持續(xù)學習所得的經驗付諸實踐躯嫉,使團隊能夠以小批量快速迭代和交付軟件。
- 加快發(fā)生故障時的恢復速度
如果生產環(huán)境中發(fā)生故障(這種情況極少發(fā)生)杨拐,CI/CD可以快速找出錯誤代碼并將修復程序推送到生產環(huán)境祈餐,讓團隊能夠縮短平均恢復時間(MTTR),從而最大限度減少對最終用戶的影響哄陶。
環(huán)節(jié)
- 代碼倉庫帆阳,用于存儲程序源文件的地方。如:GitLab屋吨,Github
- 構建蜒谤,這是一個持續(xù)集成工具,用于編譯至扰、打包程序鳍徽,運行單元測試 如:GitLab-ci,Jenkins
- 測試敢课,提供有關業(yè)務風險反饋的連續(xù)測試工具阶祭。 如:JUnit
- 發(fā)布,快速上線部署直秆,自動化發(fā)布濒募。如:docker,k8s
- 監(jiān)控與日志圾结,應用監(jiān)控瑰剃、基礎日志,幫助快速定位問題疫稿。如:ElasticStack培他,zipkin
在我們項目中的實際應用
在我們應用中的pipeline流程:
gitlab -> gitlab-ci -> docker repository -> rancher(k8s)