您好,登錄后才能下訂單哦!
基于Jenkins如何打造符合DevOps能力成熟度三級標準的持續集成流水線,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
DevOps的核心是自動化,自動化的核心是標準化。而DevOps最重要的一環節是持續交付,持續交付中建設的重點是流水線,所以如何打造標準的持續交付流水線則為DevOps建設中最重要的一環,也是評估DevOps能力的一個重要的打分點。
基于jenkins,對持續集成流水線建設的一些關鍵點進行技術應答,帶領大家把方法論落地到具體的技術點上。
文中涉及到的幾個名詞解釋:
1, 流水線:pipeline,一個應用程序從構建、部署、測試和發布這個過程實現自動化
2, 制品:構建過程的輸出物,包括軟件包、測試報告、應用配置文件等。
3, 制品庫:存儲全語言制品的倉庫,提供依賴解析及文件存儲能力。
4, 元數據:軟件生命周期全過程數據,如需求id、代碼提交信息、構建環境、靜態掃描結果、測試通過率、安全掃描結果等。
文章中涉及到的一些技術詳解:見文章《打造企業級pipeline服務的18個疑問》
下面,我們來看一下持續集成流水線建設中的配置管理、構建與持續集成、測試管理、部署與發布管理、環境管理、數據管理、度量與反饋的七個維度的三級標準是如何定義的,并且哪些指標需要在jenkins流水線中體現,如何使用jenkins流水線達到此標準。
一, 配置管理
三級標準 | Jenkins流水線落地建議方案 | ||
版本控制 | 版本控制系統 | 1)將配置文件、構建和部署等自動化腳本納入版本控制系統管理。2)有健全的版本控制系統管理機制,包括:代碼庫命名規范備份與可用性保障機制權限模型專人專崗管理。 | 流水線內容(Jenkinsfile)需要納入版本管理流水線的命名需要有明確規范流水線應明確權限,開發人員應只有可讀權限,模版由專門團隊編寫技術點:可使用jenkins的Share library特性,由專門團隊在源碼倉庫中統一管理流水線, |
分支管理 | 短周期分支分支頻繁地向主干合并 | 非流水線內容 | |
制品管理 | 1)將依賴組件納入制品庫管理2)將所有交付制品納入制品庫管理,比如:測試報告3)制品庫讀寫有清晰的權限管控制度 | 建設統一制品庫,如Artifactory。設置完整的權限。收集構建流水線過程中的所有工具的結果數據,并將此類數據定義成元數據,與制品綁定。如需求、代碼提交信息、構建環境信息、依賴信息、靜態掃描信息、單元測試信息、安全掃描信息等。技術點:可采用商用制品庫、如Artifactory。也可自行開發元數據管理系統,收集構建中過程數據。 | |
單一可信數據源 | 版本控制系統和制品庫作為單一可信數據源,覆蓋生產部署環節 | 建立統一制品庫,在jenkinsfile中指明制品庫地址,構建時不使用pom文件中的依賴解析地址,而由其他方式修改依賴解析倉庫到唯一可信倉庫中技術點:使用Artifactory統一管理制品庫,保證唯一可信源 | |
變更管理 | 變更過程 | 1)所有配置項變更由變更管理系統觸發2)針對每次變更內容進行評審,并使用自動化手段 | 不涉及流水線、注意配置與應用分離、及配置中心管理 |
變更追溯 | 實現版本控制系統和變更管理系統的自動化關聯,信息雙向同步和實時可追溯 | 不涉及流水線 | |
變更回滾 | 1)實現變更管理系統和版本控制系統的同步回滾,保證狀態的一致性2)回滾操作實現自動化 | 不涉及流水線, |
二, 構建與持續集成
三級標準 | Jenkins流水線落地建議方案 | ||
構建實踐 | 構建方式 | 1)定義結構化構建腳本,實現模塊級共享復用2)構建腳本由專人專崗統一維護 | 技術點:使用Jenkins ShareLibrary實現構建模塊化管理,并實現全局共享 |
構建環境 | 1)構建環境配置實現標準化2)有獨立的構建資源池 | 打造少量固定的標準化構建節點作為獨立的構建資源池,并用k8s集群創建動態構建節點作為動態資源池。技術點:jenkins主從架構、jenkins on k8s | |
構建計劃 | 1)實現定期自動執行構建和代碼提交觸發構建2)明確定義構建計劃和規則,并在研發團隊內共享 | 技術點:jenkins觸發器,可實現定時構建、輪詢源碼構建或webhook觸發構建 | |
構建職責 | 構建工具和環境由專門團隊維護并細分團隊人員職責 | jenkins主從節點或構建鏡像由統一團隊維護。業務部門只使用,不能修改。 | |
持續集成 | 集成服務 | 組建專門的持續集成團隊,負責優化持續集成系統和服務 | 統一團隊構建流水線模版與持續集成環境,供開發人員選擇技術點:可以通過jenkins on k8s方式,打造多種構建環境鏡像,開發人員提交構建任務時定義所需環境。 |
集成頻率 | 研發人員至少每天向代碼主干集成一次 | 不涉及流水線 | |
集成方式 | 每次代碼提交觸發自動化構建,構建問題通自動分析精準推送相關人員處理 | 每次提交代碼觸發jenkins進行構建,并在構建過程中執行完整的靜態掃描、單元測試等步驟技術點:jenkins的觸發器功能,可以設置輪訓scm或git的webhook觸發 | |
反饋周期 | 集成問題反饋和解決可以在幾個小時內完成 | jenkins pipeline中要通知構建工作完成或失敗狀態,發郵件或webhook給運維團隊和業務團隊 |
三, 測試管理
三級標準 | Jenkins流水線落地建議方案 | ||
測試分層策略 | 分層方法 | 1)采用代碼級測試對模塊的函數或類方法進行覆蓋全面的單元測試;2)系統全面的進行性能、容量、穩定性、可靠性、易用性、兼容性、安全性等非功能性測試 | 在流水線中進行單元測試,收集單元測試通過率作為元數據與制品綁定。 |
分層策略 | 1)測試設計以對接口/服務級測試為主,兼顧用戶/業務級測試輔以少量的代碼級測試2)對非功能性測試進行全面系統的設計 | 在流水線中可以集成接口測試,并收集接口測試通過率作為元數據與制品綁定。 | |
測試時機 | 1)測試在持續交付過程中的介入時間提前到開發的編碼階段2)代碼級測試在模塊的函數或類方法開發完成后進行 | 提高單元測試覆蓋率。 | |
代碼質量管理 | 質量規約 | 1)建立組織級代碼質量規約2)建立完整的質量規約,將安全漏洞檢查、合規檢查納入規約3)建立強制執行的質量門禁體系4)建立規約固定更新機制 | 需要在jenkins流水線中增加安全掃描步驟,并對掃描測試結果設置質量關卡。技術點:Xray作為安全掃描工具集成在流水線中、通過制品元數據作為質量門禁判斷構建產物是否達標 |
檢查方式 | 代碼質量檢查完全自動化,不需要手工干預 | 流水線集成sonar掃描工具,每次代碼提交自動觸發構建、自動化進行源碼掃描,并將代買壞味道數量、代碼重復率等結果數據以元數據方式回寫制品庫。技術點:sonarqube代碼靜態掃描 | |
反饋處理 | 根據代碼質量檢查結果反饋及時處理,根據質量規約維持一定的技術債 | 代碼靜態掃描結果與制品綁定,回寫到制品庫。通過制品攜帶的元數據是否通過質量門禁,來判斷制品質量。 | |
自動化測試 | 自動化設計 | 1)對接口/服務級測試進行自動化設計2)對代碼級測試進行自動化設計 | jenkins 流水線增加接口測試及服務測試 |
自動化開發 | 1)建立統一的自動化測試框架,統一管理自動化測試用例2)自動化測試腳本開發采用數據驅動、關鍵字驅動等方法; | 不涉及流水線 | |
自動化執行 | 1)對接口/服務級與代碼級測試采用自動化測試2)自動化測試由流水線自動化觸發 | 在流水線中進行所需測試 | |
自動化分析 | 對自動化測試結果具備較強的自動判斷能力,誤報少 | 流水線中收集各項測試結果,作為元數據與交付物關聯,保障每個制品都能獲取到完整的測試結果。 |
四, 部署與發布管理
三級標準 | Jenkins流水線落地建議方案 | ||
部署與發布模式 | 部署方式 | 部署和發布實現全自動化 | 部署過程作為流水線的必要步驟技術點:對接如saltstack、ansible等工具在流水線中部署 |
部署過程 | 1)使用相同的過程和工具完成所有環境部署2)一次部署過程中使用相同的構建產物 | 為確保發布內容為測試過的內容,要實現一次構建多次部署。通過元數據與倉庫名標識制品成熟度。流水線中要將制品在不同成熟度倉庫移動,并收集各個環境中的結果數據作為元數據存儲。技術點:應用配置分離、Artifactory元數據及promotion功能 | |
部署策略 | 1)采用定期部署策略,具備按天進行部署的能力2)應用和環境整體作為部署的最小單位3)應用和配置進行分離 | 不涉及流水線 | |
部署質量 | 1)部署失敗率低2)部署活動集成自動化測試功能,并以測試結果為部署前置條件3)每次部署活動提供變更范圍報告和測試報告 | 部署后會在流水線中進行簡單驗證,收集驗證結果數據。測試結果收集到元數據中,部署時驗證元數據,判斷是否通過質量門禁,來實現部署。 技術點:Artifactory元數據 | |
持續部署流水線 | 協作模式 | 通過定義完整的軟件交付過程和清晰的交付規范,保證團隊之間交付的有序 | 標準化工具鏈及持續集成流水線,收集個階段結果數據作為元數據,用元數據標識制品的質量標準,供各個團隊間進行使用。 |
流水線過程 | 軟件交付過程中的各個環節建立自動化能力以提升處理效率 | 不涉及流水線 | |
過程可視化 | 1)交付過程在團隊內部可見,信息在團隊間共享2)交付狀態可追溯 | 流水線中收集整個構建過程結果數據,與制品綁定,供所有團隊查看。技術點:Artifactory元數據 |
五, 環境管理
三級標準 | Jenkins流水線落地建議方案 | ||
環境管理 | 環境類型 | 建立標準的研發環境 | 不涉及流水線 |
環境構建 | 1)環境的構建通過自服務的資源交付平臺來完成2)環境準備時間小時級 | 可在流水線中自動創建所需環境。技術點:使用k8s的helm自動拉起整套環境,helm是最佳的實現方式 | |
環境依賴于配置管理 | 以應用為中心,有服務級依賴的配置管理能力,比如:依賴的關聯服務,數據庫服務、緩存服務、關聯應用服務等等 | 不涉及流水線 |
六, 數據管理
三級標準 | Jenkins流水線落地建議方案 | ||
測試數據管理 | 數據來源 | 導出部分生產環境數據并清洗敏感信息后形成基準的測試數據集 | 不涉及流水線 |
數據覆蓋 | 建立體系化測試數據,進行數據依賴管理,覆蓋全部測試分層策略要求的測試類型 | 不涉及流水線 | |
數據獨立性 | 1)每個測試用例擁有專屬的測試數據有明確的測試初始狀態2)測試用例的執行不依賴其他測試用例執行所產生的數據 | 不涉及流水線 | |
數據變更管理 | 變更過程 | 將數據變更納入持續部署流水線,經人工確認后自動完成 | 流水線與審批系統集成。 |
兼容回滾 | 每次數據變更同時提供明確的回滾機制,并實現進行變更測試,如:提供升級和回滾兩個自動化腳本 | 不涉及流水線 | |
數據監控 | 針對不同環境和危險程度對數據變更建立分級監控機制 | 不涉及流水線 |
七, 度量與反饋
三級標準 | Jenkins流水線落地建議方案 | ||
度量指標 | 度量指標定義 | 建立跨組織度量指標,進行跨領域綜合維度的度量 | 不涉及流水線 |
度量指標類型 | 度量指標覆蓋過程指標,客觀反映組織研發現狀 | 流水線中需要收集元數據,作為后續度量指標 | |
度量數據管理 | 持續收集度量數據歷史度量數據有明確的管理規則 | 流水線中需要收集元數據,作為后續度量指標 | |
度量指標更新 | 1)度量指標可以按照需求定期更新2)度量指標的優先級在團隊內部達成一致 | 不涉及流水線 | |
度量驅動改進 | 內容和生成方式 | 度量報告進行分類分級并按需生成內容 | 流水線中需要收集元數據,作為后續度量指標。對元數據進行二次清晰,生成報告 |
數據時效性 | 通過可視化看板實時展示數據 | 看板需要展示流水線狀態,如構建時間、通過率、故障率等 | |
覆蓋范圍 | 全部團隊成員均可查看報告 | 不涉及流水線 | |
反饋改進 | 度量反饋問題納入研發迭代的待辦事項列表,作為持續改進的一部分 | 不涉及流水線 |
通過上述數據及分析,可以看出,打造出一個標準的流水線服務可以匹配到60%的三級標準。那么我們可以在整個DevOps的建設中投入較大的力量來打造流水線。一套標準的流水線服務和穩定的工具鏈將會成為DevOps建設的一個基石,并且成為貫穿你的整個建設周期中。
看完上述內容,你們掌握基于Jenkins如何打造符合DevOps能力成熟度三級標準的持續集成流水線的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。