本章闡述持續集成系統的發展歷程、持續集成系統的原理,以及持續集成系統的實現過程,目的是讓你們全面瞭解持續集成系統,更加深刻的學習持續集成系統的原理,爲後續章節的學習作好準備。我會分享一些我的的經驗。前端
若是你沒有親身體驗過傳統的應用發佈,你可能不會以爲CI/CD有什麼吸引人的地方。通常一個開發團隊中都會存在多個角色:開發、測試、運維。 當時咱們的應用發佈模式能夠能是這樣的:java
固然我描述的可能只是其中的一部分,手動操做不少、出現的問題不少。上面看似很流暢的過程,其實每次構建或發佈均可能會出現問題。未對每次提交驗證、構建環境不一致:開發人員本地測試成功後提交代碼,運維同窗下載代碼進行編譯卻出現了錯誤。python
持續集成CI:是須要對開發人員每次的代碼提交進行構建測試驗證。肯定每次提交的代碼都是能夠正常編譯測試經過的。在沒有持續集成服務器的時候,咱們能夠寫一個程序來監聽版本控制系統的狀態,當出現了push動做則觸發相應的腳本運行編譯構建等步驟。 如今有了專業的持續集成服務器後,咱們藉助持續集成服務器來實現版本控制系統中代碼提交觸發構建測試等驗證步驟。git
持續交付CD:是基於持續集成的基礎上,將集成後的代碼自動化的發佈到各個環境中測試(DEV TEST UAT STAG),肯定能夠發佈生產版本。 這裏咱們能夠借用製品庫實現製品的管理,根據環境類型建立對應的製品庫。一次構建,處處運行。web
持續部署CD:是基於持續交付的基礎上,將在各個環境通過測試的應用自動化部署到生產環境。其實各個環境的發佈過程都是同樣的。應用發佈到生產環境後,咱們須要對應用進行健康檢查、添加應用的監控項、 應用日誌管理。docker
對於持續集成工具如今也有不少,目前應用最多的是Jenkins。Jenkins前身是Hudson,使用java語言開發的自動化發佈工具。Jenkins是跨平臺的能夠在Win、Linux、MacOS部署。Jenkins是應用最廣的開源免費的持續集成服務器,企業中廣泛使用Jenkins來做爲項目集成發佈工具。 Jenkins官方提供的插件使Jenkins更爲強大。Jenkins是一個自動化服務器,目前發展超過15年,比較成熟的CI工具(也能夠CD)可以實現自動化集成發佈。創建好流水線後,期間無需專業運維人員介入,開發人員隨時發佈部署。shell
Jenkins採用分佈式架構,分爲server節點和agent節點。 server節點也是能夠運行構建任務的,但咱們通常使其主要來作任務的調度。(畢竟server節點掛了就都...)agent節點專門用於任務的執行。 隨着如今容器的盛行,咱們能夠將server節點和agent節點在容器或者基於Kubernetes中部署。 關於agent節點藉助容器能夠實現動態的資源分配等等好處。agent節點能夠分爲靜態節點和動態節點。 靜態節點是固定的一臺vm虛機或者容器。 動態節點是隨着任務的構建來自動建立agent節點。 編程
Jenkins的核心是Pipeline(流水線項目),實現了Pipeline As Code。即咱們將構建部署測試等步驟所有以代碼的形式寫到Jenkinsfile中。Jenkins在運行Pipeline任務的時候會按照Jenkinsfile中定義的代碼順序執行。寫Jenkinsfile是一項很重的工做,若是稍不注意很容易形成Jenkins的流水線任務失敗。 Jenkinsfile相似於Dockerfile,具備一套特定的語法。(後續咱們會詳細講解jenkinsfile編寫)後端
在Jenkins pipeline中,一條流水線是由多個階段組成的,每一個階段一個stage。例如:構建、測試、部署等等。服務器
我是在18年左右接觸的Jenkins,算下來已經2年了。咱們的DevOps工具鏈只有Gitlab 和Jenkins,屬於建設階段。 流水線是手動複製建立的。還好有寫好的Jenkinsfile模板,一般改改每一個項目的git地址,就能夠了。
優化流水線
開始改造Jenkins了, 將以前寫的Jenkinsfile所有閱讀一遍,想辦法整合一下。 最後將各類類型的Jenkinsfile合併成了一個Jenkinsfile。一個Jenkinsfile的確方便了許多,可是這個文件怎麼這麼長? 1000+行 看起來都累。學到了Jenkins共享庫的概念。開始學習groovy語法將通用的語句封裝函數。因爲我具備python語言基礎因此學習groovy就比較容易了。 我當時看的是<groovy編程>這本書。 使用共享庫的方式將一個複雜的Jenkinsfile優化成了一個簡潔的Jenkinsfile。
腳本式語法到聲明式語法
當時我設置了一個小功能,根據參數決定運行的階段。 因而我在共享庫中將每一個stage封裝了一下。而後,經過case語句根據pipeline的值,來決定運行哪些stage方法。 看似很不錯的功能用了一段時間也頗有效。 看到了一篇官方文章推薦的是流水線使用聲明式語法,聲明式語法中具備when語句能夠輕鬆的實現這些功能。........因而開始將腳本式語法替換爲聲明式語法,以前寫的這些都沒用了.....
DevOps項目改造
自從2019年04月,主要從事於工具鏈更新維護和DevOps標準評估項目改進事務。項目AAA自6月份開始,流水線更新了4個大版本。 起初的1.0版本配置完成後並不符合當前項目團隊的開發模式;2.0版本根據項目團隊的要求出發配置完成後通過專家評估一些細節不符合認證要求;按照認證要求3.0版本流水線配置完成後發現了不少細節上的問題(過程太長,人工操做較多等);最後4.0版本以jira出發實現端到端的自動化,減小人工操做,打造既符合實際業務也符合認證標準的流水線。
在不斷的學習DevOps理論和文化的過程當中,將持續交付流水線改造的更加靈活。持續集成平臺優化:
a) 完成Jenkins共享庫開發,實現多流水線支持,構建更加靈活。
b) 完成Jenkins容器構建資源池,加快構建和編譯速度。
c) 完成Jenkins CICD分離集成,與DevOps平臺適配。
d) 完成流水線結合製品庫完成製品的上傳和下載,減小發布時間。
e) 完成基於Jira的端到端流水線實踐。
f) 完成基於容器的自動化測試流水線實踐。
g) 探索SQL審覈工具,完成基礎SQL掃描,提升SQL質量。
h) 研究SonarQube平臺接口,集成Jenkins使代碼掃描更加靈活。
i) 研究Gitlab平臺接口,集成Jenkins實現代碼自動化。
咱們在學習一門技術的時候老是想知道學完了能夠作什麼?咱們來談談Jenkins能夠作什麼呢? 其實我想告訴你,踏踏實實去學習,只要熟練的掌握Jenkinsfile的編寫,Jenkins什麼事情都是能夠作。限制Jenkins功能的不是Jenkins自己。 你能夠將Jenkins想象成一個能夠配置的web前端頁面,然後面的Jenkinsfile就是咱們要寫的後端代碼。
對於今年2月份上線的《Jenkins實踐教程》還算滿意,目前已經積攢了約1000+學員。積攢了100多個學習Jenkins常常遇到的問題。談談咱們學習Jenkins以前要具有哪些基礎知識呢?
基礎要求:
擴展知識: 可讓你的流水線更增強大與靈活。
是否是看上去不少呢? 其實這些都是咱們前往技術型DevOps工程師所必備的知識點了。 若是你是開發人員你須要補充運維相關的知識,若是你是運維人員須要補開發知識。Jenkins是開發、運維同窗到DevOps的轉折點。
今天,咱們分享了關於Jenkins剛剛開始學習時的一些學習建議與方法,後面咱們將開始進一步深刻了解Jenkins的功能與特性。