Jenkins X--(3)具備什么樣的加速能力

JENKINS X

Jenkins X 重新構(gòu)思了云原生時(shí)代下的 CI/CD 實(shí)現(xiàn),這些想法受到了 DevOps 狀態(tài)報(bào)告和近來大熱的《Accelerate》一書的深刻影響,這本書的三位合著者分別是:Nicole Forsgren、Jez Humble以及Gene Kim。

經(jīng)年累月基于真實(shí)世界中的團(tuán)隊(duì)和組織收集上來的數(shù)據(jù)被 DevOps 領(lǐng)域的思想領(lǐng)袖和數(shù)據(jù)科學(xué)家們進(jìn)行了深入的分析?!禔ccelerate》一書總結(jié)了一組有助于實(shí)施 DevOps 的能力,這些能力被 Jenkins X 實(shí)現(xiàn)以幫助用戶以開箱即用的方式獲取到科學(xué)證明過的收益。我們會(huì)從已經(jīng)實(shí)現(xiàn)的能力項(xiàng)入手,并不斷整合更多的能力進(jìn)來。



1、對所有構(gòu)件進(jìn)行版本控制

來自 Weaveworks 的天才們創(chuàng)造了 GitOps 的概念,這一點(diǎn)我們非常認(rèn)同。對環(huán)境的任何變更,無論是一個(gè)新的應(yīng)用,版本升級,資源約束變更,還是簡單的應(yīng)用配置,都應(yīng)該在 Git 上提交一個(gè) Pull Request ,并且采用類似環(huán)境的持續(xù)集成對這些變更進(jìn)行驗(yàn)證,并且經(jīng)過團(tuán)隊(duì)的審核,這個(gè)團(tuán)隊(duì)負(fù)責(zé)所有相關(guān)環(huán)境的變更控制。于是針對一個(gè)環(huán)境的任何變更都可以被追溯并且達(dá)到受控狀態(tài)。

關(guān)聯(lián)的加速能力項(xiàng):對所有生產(chǎn)構(gòu)件進(jìn)行版本控制

2、自動(dòng)化部署過程

環(huán)境

Jenkins X 在安裝過程中會(huì)自動(dòng)創(chuàng)建基于 Git 的環(huán)境,并且使用jx create environment命令來輕松地創(chuàng)建新的環(huán)境。此外,當(dāng)通過quickstart(jx create quickstart)創(chuàng)建一個(gè)新的基于 Java 中 SpringBoot (jx create spring) 應(yīng)用,或者導(dǎo)入已有應(yīng)用(jx import)時(shí),Jenkins X 都會(huì)自動(dòng)幫你添加 CI/CD 流水線,并配置相關(guān)任務(wù)、git 代碼倉庫、webhook 來啟用自動(dòng)化部署流程。

Jenkins X 開箱即用地創(chuàng)建了永久的預(yù)發(fā)布和生產(chǎn)環(huán)境(這個(gè)是可配置的)以及一個(gè) Pull Request 階段臨時(shí)使用的應(yīng)用預(yù)覽環(huán)境。

預(yù)覽環(huán)境

在一個(gè)變更被合入主干之前,我們希望盡可能的進(jìn)行測試、安全、驗(yàn)證和試驗(yàn)工作。使用臨時(shí)動(dòng)態(tài)創(chuàng)建的預(yù)覽環(huán)境,任何 Pull Request 都會(huì)生成有一個(gè)預(yù)覽版本被構(gòu)建和部署,包括引用了公共庫的下游應(yīng)用。這就意味著我們可以同任何關(guān)聯(lián)團(tuán)隊(duì)進(jìn)行代碼評審,測試和更好的協(xié)作,來確認(rèn)這次變更可以部署到生產(chǎn)環(huán)境。

Jenkins X 的終極目標(biāo)是提供一種方式,幫助開發(fā)人員、測試人員、設(shè)計(jì)人員和產(chǎn)品經(jīng)理來驗(yàn)證將要合入主干的變更完全符合預(yù)期。我們希望確信這次變更沒有對任何服務(wù)或特性帶來負(fù)面影響,并且按照預(yù)想的那樣來交付價(jià)值。

讓預(yù)覽環(huán)境變得真正有趣的是,當(dāng)我們能夠在不同階段和成熟度的情況下進(jìn)行 PR,也就是我們可以導(dǎo)入一定比例的真實(shí)生產(chǎn)環(huán)境流量,比如 beta 用戶。那么我們可以分析此次變更的價(jià)值,并且使用假設(shè)驅(qū)動(dòng)開發(fā)的方式運(yùn)行多種自動(dòng)化試驗(yàn)。這會(huì)幫助我們更好的理解當(dāng)變更推送給所有用戶時(shí)的效果。

關(guān)聯(lián)的加速能力項(xiàng):培養(yǎng)和支持團(tuán)隊(duì)試驗(yàn)

使用預(yù)覽環(huán)境是導(dǎo)入自動(dòng)化測試的絕佳方式。雖然 Jenkins X 支持這種方式,但是我們尚沒有針對預(yù)覽環(huán)境進(jìn)行自動(dòng)化測試的例子。一個(gè)最簡測試集合應(yīng)該可以確保應(yīng)用正常啟動(dòng),并且通過一段時(shí)間的 Kubernetes 的有效性(liveness)檢查。相關(guān)內(nèi)容包括:

關(guān)聯(lián)的加速能力項(xiàng):實(shí)施自動(dòng)化測試

關(guān)聯(lián)的加速能力項(xiàng):自動(dòng)化部署過程

永久環(huán)境

在軟件開發(fā)中,我們習(xí)慣于在變更部署到生產(chǎn)環(huán)境之前在多套環(huán)境中驗(yàn)證。盡管這看起來沒什么問題,但是如果在真正合并到主干之前,某些流程證明它并不合適,這就有可能導(dǎo)致其他變更的嚴(yán)重延遲。后續(xù)提交都會(huì)阻塞,并且緊急生產(chǎn)環(huán)境變更也同樣會(huì)被推遲。

Jenkins X 希望所有變更和試驗(yàn)在合并主干之前都經(jīng)過驗(yàn)證。變更在預(yù)發(fā)布環(huán)境中經(jīng)過一段時(shí)間的驗(yàn)證后在推送到生產(chǎn)環(huán)境,理想情況下使用自動(dòng)化的方式。

Jenkins X 的默認(rèn)流水線提供了環(huán)境間自動(dòng)化部署的能力。它可以被定制以適配你自己的 CI/CD 流水線要求。

Jenkins X 認(rèn)為預(yù)發(fā)布環(huán)境應(yīng)該盡可能的模擬生產(chǎn)環(huán)境,理想情況下使用服務(wù)網(wǎng)格技術(shù)導(dǎo)入真實(shí)生產(chǎn)數(shù)據(jù)來驗(yàn)證真實(shí)行為。這同樣有助于預(yù)覽環(huán)境的變更部署,我們可以將其鏈接到預(yù)發(fā)布中的非生產(chǎn)服務(wù)。

關(guān)聯(lián)的加速能力項(xiàng):自動(dòng)化部署過程

3、使用主干開發(fā)分支策略

《Accelerate》一書的研究發(fā)現(xiàn)那些使用短分支生命周期并基于主干開發(fā)的團(tuán)隊(duì)擁有更好的效能。這對于 Jenkins X 核心團(tuán)隊(duì)成員而言再熟悉不過,所以 Jenkins X 通過配置 Git 倉庫和 CI/CD 任務(wù)即可輕松實(shí)現(xiàn)這個(gè)能力。

4、實(shí)施持續(xù)集成

Jenkins X 將 CI 視為一個(gè)變更經(jīng)過 Pull Request 合入主干前的驗(yàn)證活動(dòng)。自動(dòng)化配置代碼倉庫,Jenkins 和 Kubernetes 來提供開箱即用的持續(xù)集成功能。

5、實(shí)施持續(xù)交付

Jenkins X 將 CD 視為一個(gè)變更合入主干后到線上環(huán)境運(yùn)行的活動(dòng)。Jenkins X 將發(fā)布流水線中的大部分環(huán)境自動(dòng)化:

Jenkins X 建議使用語義化版本號。采用 Git 標(biāo)簽來計(jì)算下一次發(fā)布版本,意味著無需在主干分支中保存最新的版本號。當(dāng)發(fā)布系統(tǒng)將最新的和下一次版本保存在 Git 倉庫中,這會(huì)讓 CD 變得困難,因?yàn)榘l(fā)布流水線中的變更會(huì)觸發(fā)一次新的發(fā)布,這會(huì)導(dǎo)致遞歸的發(fā)布觸發(fā)器。使用 Git 標(biāo)簽可以避免這種情況來實(shí)現(xiàn) Jenkins X 的完整自動(dòng)化流程。

Jenkins X 會(huì)基于每一次針對主干的變更自動(dòng)創(chuàng)建一個(gè)發(fā)布版本,這個(gè)版本就是潛在部署到生產(chǎn)環(huán)境的版本。

6、使用松耦合的架構(gòu)

Jenkins X 面向 Kubernetes 用戶,這讓它可以受益于多種云的特性來設(shè)計(jì)和開發(fā)松耦合的解決方案。服務(wù)發(fā)現(xiàn)、容錯(cuò)性、擴(kuò)展性、健康檢查、滾動(dòng)升級、容器編排和調(diào)度等僅僅是 Kubernetes 所帶來的部分能力。

7、賦能團(tuán)隊(duì)的架構(gòu)

Jenkins X 旨在幫助多語言的應(yīng)用開發(fā)者。目前 Jenkins X 具備自動(dòng)語言檢測能力的 quickstart 和自動(dòng)化 CI/CD 配置,比如 Golang, Java, NodeJS, .Net, React, Angular, Rust, Swift 以及更多語言支持。這樣做也提供了一個(gè)持續(xù)性的工作方式來讓開發(fā)者更加專注于開發(fā)活動(dòng)。

Jenkins X 同樣提供了很多插件,比如自動(dòng)化度量數(shù)據(jù)收集和可視化工具:Grafana 和 Prometheus。集中化的度量可以幫助我們查看構(gòu)建和部署在 Kubernetes 上的應(yīng)用指標(biāo)。

DevPods?是一個(gè)全新的特性,可以幫助開發(fā)人員在本地 IDE 中編輯代碼,并自動(dòng)化同步到云環(huán)境上進(jìn)行構(gòu)建和重新部署。

Jenkins X 相信自動(dòng)化可以幫助開發(fā)者在云環(huán)境下進(jìn)行試驗(yàn),使用不同的技術(shù),并通過反饋?zhàn)屗麄兏斓淖龀鲎罴褯Q策。

參考:Jenkins X官網(wǎng)

======================================

本人水平有限,難免有錯(cuò)誤或疏漏,望大家指正,歡迎留言交流。歡迎關(guān)注本人微信公眾號:DevOps亮哥

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 版本記錄 前言 我們在做App開發(fā)的時(shí)候,開發(fā)人員開發(fā)完成以后就要交給QA進(jìn)行測試了,有幾種方式,一種就是將QA的...
    刀客傳奇閱讀 754評論 0 2
  • 爸爸、媽媽: 你們好嗎?你們不要太忙,注意身體。時(shí)不時(shí)給自己放個(gè)假,一塊兒出去到處轉(zhuǎn)轉(zhuǎn)! 這幾年我們都挺好的。先從...
    月光明媚閱讀 302評論 5 7
  • 今天明顯感覺自己用腦過度,上班工作沉迷數(shù)字中,下班沉迷于企業(yè)項(xiàng)目和做教練中,連上下班路上也沒閑著看《聲臨其境》中,...
    楊芬聊優(yōu)勢閱讀 227評論 0 0
  • 每天開車上班來,我喜歡打開FM102.4河北交通頻道,聽聽新聞,聽聽歌曲,也欣賞其中的廣告小節(jié)目,其中有一個(gè)廣告我...
    在水一方_2018閱讀 365評論 0 4
  • “人生的道路雖然漫長,但緊要處常常只有幾步,特別是當(dāng)人年輕的時(shí)候。沒有一個(gè)人的生活道路是筆直的,沒有岔道的。有些岔...
    野馬石閱讀 302評論 0 0

友情鏈接更多精彩內(nèi)容