在本系列教程中,筆者希望將必要的知識點圍繞理論、流程(工作流程)、方法、實踐來進行講解,而不是單純的為講解知識點而進行講解。也就是說,筆者希望能夠讓大家將理論、知識、思想和指導應用到工作的實際場景和實踐之中,而不是拿著字典寫文章,抱著寶典寫程式碼。至於很多具體的語法、技術細節,除了常用的知識點,筆者更希望大家閱讀官方文件——畢竟看官網比看書靠譜多了,官網會一直更新和改進,而書和教程自出版或釋出之後,基本上就“死“了。
本系列教程預計全部完成還需要2到3個月的時間。在這個過程中,您可以加入我們一起討論、交流和分享這一塊的技術。我們也希望得到大家的支援,請多多點贊,你們的支援是我們前進的最大動力!
使用Azure DevOps來完成CI
Azure DevOps,以前叫VSTS,現在被微軟改名部正式更名為Azure DevOps,說明微軟云為先之心仍然蠢蠢欲動。不過和VSTS一樣,微軟都提供了免費的使用額度,對於小團隊和個人開發者來說,完全是足夠了。
什麼是DevOps?
DevOps(Development和Operations的組合詞)是一組過程、方法與系統的統稱,用於促進開發(應用程式/軟體工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。它是一種重視“軟體開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟體交付”和“架構變更”的流程,來使得構建、測試、釋出軟體能夠更加地快捷、頻繁和可靠。它的出現是由於軟體行業日益清晰地認識到:為了按時交付軟體產品和服務,開發和運營工作必須緊密合作。
DevOps的引入能對產品交付、測試、功能開發和維護(包括──曾經罕見但如今已屢見不鮮的──“熱補丁”)起到意義深遠的影響。在缺乏DevOps能力的組織中,開發與運營之間存在著資訊“鴻溝”──例如運營人員要求更好的可靠性和安全性,開發人員則希望基礎設施響應更快,而業務使用者的需求則是更快地將更多的特性發布給終端使用者使用。這種資訊鴻溝就是最常出問題的地方。
DevOps經常被描述為“開發團隊與運營團隊之間更具協作性、更高效的關係”。由於團隊間協作關係的改善,整個組織的效率因此得到提升,伴隨頻繁變化而來的生產環境的風險也能得到降低。
總之,通過DevOps,各專業團隊之間的協調和協作得到改善,縮短了將更改提交到系統與將更改投入到生產之間的時間。它還可確保此過程符合安全性和可靠性標準。結果:產品質量改善、交付速度加快、客戶滿意度提升。
DevOps對應用程式釋出的影響
在很多企業中,應用程式釋出是一項涉及多個團隊、壓力很大、風險很高的活動。然而在具備DevOps能力的組織中,應用程式釋出的風險很低,原因如下:
- 減少變更範圍
與傳統的瀑布式開發模型相比,採用敏捷或迭代式開發意味著更頻繁的釋出、每次釋出包含的變化更少。由於部署經常進行,因此每次部署不會對生產系統造成巨大影響,應用程式會以平滑的速率逐漸生長。
- 加強釋出協調
靠強有力的釋出協調人來彌合開發與運營之間的技能鴻溝和溝通鴻溝;採用電子資料表、電話會議、即時訊息、企業門戶(wiki、sharepoint)等協作工具來確保所有相關人員理解變更的內容並全力合作。
- 自動化
強大的部署自動化手段確保部署任務的可重複性、減少部署出錯的可能性。
與傳統開發方法那種大規模的、不頻繁的釋出(通常以“季度”或“年”為單位)相比,敏捷方法大大提升了釋出頻率(通常以“天”或“周”為單位)。減少變更範圍與傳統的瀑布式開發模型相比,採用敏捷或迭代式開發意味著更頻繁的釋出、每次釋出包含的變化更少。由於部署經常進行,因此每次部署不會對生產系統造成巨大影響,應用程式會以平滑的速率逐漸生長。加強釋出協調靠強有力的釋出協調人來彌合開發與運營之間的技能鴻溝和溝通鴻溝;採用電子資料表、電話會議、即時訊息、企業門戶(wiki、sharepoint)等協作工具來確保所有相關人員理解變更的內容並全力合作。強大的自動化部署手段能夠確保部署任務的可重複性、減少部署出錯的可能性。
適用於容器的 CI/CD 流程
使用容器,可輕鬆地持續生成和部署應用程式。
Azure DevOps 可以通過設定持續版本以生成容器映像和業務流程,讓我們能更快、更可靠地進行部署。以下是一個適用於容器和Azure的CI/CD 流程:
步驟說明:
使用Azure DevOps來配置一個簡單的CI流程
Azure DevOps服務涵蓋了整個開發生命週期,可幫助開發人員更快地高質量地交付軟體,其提供了Azure Pipelines、Azure Boards、Azure Artifacts、Azure Repos和Azure Test Plans。關於Azure DevOps我們就介紹到這裡,畢竟是免費介紹。
現在,我們需要側重介紹的是Pipelines,也就是程式碼流水線。看,多形象,所以以前自詡為碼農是錯誤的,我們應該是碼工,廣大流水線工人的一環,無產階級之一,共產主義接班人。不好意思,又偏題了,我們繼續:
首先,我們需要定義一個流水線,為了便於演示,我這裡就定義一些針對Docker的簡單步驟,大家可以按需新增步驟,比如單元測試步驟等等。
如圖所示,步驟很簡單,首先設定程式碼源,這裡我們直接對接Magicodes.Admin框架的git庫地址。Git庫地址大家可以在這裡找到:https://gitee.com/xl_wenqiang/Magicodes.Admin.Core。
因為程式碼是託管再碼雲,所以我們選擇如上圖所示的最後一種方式,並且選擇對應的分支。
接下來,我們需要新增job和task。job新增一個預設的即可,無需設定什麼條件和引數。接下來我們新增task,實際上就是步驟。
第一步,構建映象。
我們需要新增一個docker task:
然後設定command命令為build,也就是構建:
構建配置我們可以根據自己的需求來設定,比如根據分支設定映象版本等等。
第二步,登入騰訊雲映象倉庫並且推送。
這一步,就有點門檻了,原生的docker命令並不好使,因為task之間的上下文是斷開的,也就是login了你也沒法push。這時候,還是命令列靠譜,簡單粗暴。所以我們需要新增一個Command line task:
然後編寫命令指令碼:
簡單粗暴的兩個步驟就搞定了,大家可以根據自己的持續整合流程來定製,畢竟微軟在開發者服務這塊淫蕩多年,還是相當給力的。我們可以初步看看支援的task:
非常之多,足夠我們隨便玩了。而且玩壞了還不用賠錢。
接下來,跑起來:
點開還能看到詳細的過程:
激不激動,簡單不簡單?就這麼幾下就搞定了。產品很強大,就是拉取程式碼有點慢,看起來是託管在國外。順手一查,額,美國:
因此,我們不是很推薦使用Azure DevOps來完成CI,網路的延遲足夠拖垮我們焦慮的神經。但是如果我們的程式碼託管在Github,那麼使用Azure DevOps是不錯的選擇。在接下來的教程中,我們會講解如何打造自己的Github開源庫的CI流程——不僅完全自動化,而且還支援在readme頁面新增各種動態圖示。