DevOps 在軟件開發(fā)行業(yè)中掀起的變革浪潮仍在持續(xù),無論是先行的互聯(lián)網(wǎng)企業(yè),還是信息化轉(zhuǎn)型中的傳統(tǒng)企業(yè) IT 部門,越來越多的企業(yè)在研發(fā)戰(zhàn)略層面開始采用 DevOps 方法。與此同時(shí),各大調(diào)查報(bào)告都顯示 DevOps 工程師已成為全球收入最高的職位之一。
無論是人才市場需求,還是收入薪資水平,種種跡象表明,DevOps 工程師已經(jīng)成為當(dāng)今最炙手可熱的崗位,收入也攀升至 IT 行業(yè)的金字塔頂端。這意味著企業(yè)中的開發(fā)者也要順應(yīng)時(shí)代潮流,適時(shí)地更新自己的技能樹,及時(shí)掌握 DevOps 技能。
在 DevOps 模式中,最核心的要義是通過跨團(tuán)隊(duì)協(xié)作在短時(shí)間內(nèi)交付高價(jià)值的軟件功能。因此,DevOps 工程師除了要具備軟件工程師基本的編程能力以外,還需要特定的人際交往、工具使用等技能。換句話說,DevOps 工程師需要“軟”、“硬”技能兼?zhèn)?具體如下:
一、溝通與協(xié)作技巧
DevOps 是一種橫跨軟件開發(fā)、測試和部署的協(xié)作方法。它將原本具有不同目標(biāo)的開發(fā)、測試和運(yùn)維小團(tuán)隊(duì)聚集在一起,以實(shí)現(xiàn)更高效和高質(zhì)量的代碼發(fā)布,這就要求 DevOps 流程中的不同角色之間不能有任何交流障礙。因此,良好的溝通技巧(無論是口頭還是書面)對于優(yōu)秀的 DevOps 工程師來說是必不可少的。
工程師需要定期與參與 DevOps 流程的內(nèi)部管理團(tuán)隊(duì)交談,并熟悉目標(biāo)、路線圖、阻塞問題和其他項(xiàng)目所涉及的內(nèi)容。此外,很多情況下還需要圍繞支持問題與客戶進(jìn)行有效溝通。
除了溝通能力以外,協(xié)作能力也很重要。DevOps 是團(tuán)隊(duì)合作的開發(fā)模式,每個工程師都是團(tuán)隊(duì)成員,需要在整個軟件迭代過程中支持其他同事的工作。這不僅僅要求我們成為一名優(yōu)秀的隊(duì)友,還要在適當(dāng)?shù)臅r(shí)候給新人一些建議,包括但不限于指導(dǎo)和建議團(tuán)隊(duì)成員交付代碼的最佳方式、編碼時(shí)使用哪些工具以及如何測試最新功能。這就要求我們自身也要對這些 DevOps 流程中的必要技能有所了解。
二、熟悉和理解 DevOps 工具鏈
除了協(xié)作和溝通這樣的“軟”技能之外,DevOps 工程師還必須知道如何使用各種復(fù)雜工具協(xié)同工作以支持軟件交付目標(biāo),這是成為一個優(yōu)秀的 DevOps 工程師所必備的“硬”技能。
DevOps 工程師需要知道如何使用和理解以下類型工具的作用:
版本控制工具
詳細(xì)地說,集合了代碼審查、合并功能的版本控制工具是能讓多個開發(fā)人員之間完美協(xié)作的主要DevOps 工具。由于 DevOps 流程匯集了來自各個部門的專家,所以他們需要了解源代碼控制系統(tǒng),以及系統(tǒng)跟蹤不同應(yīng)用程序中的更改。此外,它還維護(hù)應(yīng)用程序的多個版本。
目前 DevOps 流程中常用的版本控制系統(tǒng)都基于開源分布式版本控制系統(tǒng) Git,例如 GitHub、Gitee、GitLab 以及各大廠商基于 Git 定制的內(nèi)源協(xié)作工具。
持續(xù)集成工具
持續(xù)集成(CI)是 DevOps 的關(guān)鍵技能之一,它是構(gòu)建 pipeline 的重要部分。DevOps 要求運(yùn)營和開發(fā)團(tuán)隊(duì)使用統(tǒng)一的系統(tǒng)。因此,持續(xù)集成所做的就是將開發(fā)人員的代碼與 master 合并在一起。有了這樣的技巧,就可以有效地合并數(shù)據(jù)。因此,DevOps 工程師一定要知道如何使用一些常用的 CI 工具,例如 GitHub Action、Jenkins、Bamboo、TeamCity、Travis CI 等。
容器與編排工具
容器作為現(xiàn)代微服務(wù)與云原生架構(gòu)的核心技術(shù),提供了關(guān)于 DevOps 的三個基本功能,包括持續(xù)的實(shí)驗(yàn)、流動和反饋。容器技術(shù)的不可變基礎(chǔ)設(shè)施實(shí)現(xiàn)了操作系統(tǒng)層虛擬化,不僅方便運(yùn)維程序升級和部署,還升華成了向應(yīng)用代碼隱藏環(huán)境復(fù)雜性的手段,成為推廣分布式服務(wù)的必要前提。
目前,Docker 仍然是應(yīng)用最廣泛的容器技術(shù),而以容器編排引擎 Kubernetes 為核心的云原生技術(shù)棧則是各大互聯(lián)網(wǎng)企業(yè)構(gòu)建容器技術(shù)基礎(chǔ)設(shè)施的事實(shí)標(biāo)準(zhǔn)。
自動化工具
自動化是軟件開發(fā)過程中必不可少的要素之一。幾乎所有的手工任務(wù)都可以使用各種腳本語言自動完成。例如,Ruby、Bash、Python、Node、Shell 等等。可以說,使用自動化開發(fā)工具已經(jīng)成為了很多 DevOps 團(tuán)隊(duì)加快開發(fā)和部署過程的關(guān)鍵。想要成為 DevOps 工程師,掌握自動化工具很有必要。
除了上述特定技術(shù)棧帶來的自動化方法外,隨著 DevOps 實(shí)踐在國內(nèi)企業(yè)中越來越流行,開發(fā)者對自動化的需求越來越高,降低自動化工具部署門檻成為市場需求,催生了一些開箱即用、集成功能的 DevOps 自動化平臺,例如國內(nèi)的 Gitee、飛算SoFlu軟件機(jī)器人等。
Gitee 企業(yè)版在原代碼平臺的基礎(chǔ)上為企業(yè)用戶提供了豐富的一站式 DevOps 工具,有效優(yōu)化了團(tuán)隊(duì)之間及技術(shù)團(tuán)隊(duì)的協(xié)作模式,實(shí)現(xiàn)代碼,文檔等軟件開發(fā)資源的統(tǒng)一和系統(tǒng)管理,幫助團(tuán)隊(duì)在開發(fā)中學(xué)習(xí)、成長、修正和完善,建立現(xiàn)代 DevOps 流程。
飛算SoFlu軟件機(jī)器人是由飛算推出的全自動軟件開發(fā)工具,從另一個角度幫助開發(fā)團(tuán)隊(duì)提高 DevOps 研發(fā)效率,其包括(后端)全自動開發(fā)平臺、(前端)全自動開發(fā)平臺、全自動測試平臺和全自動運(yùn)維平臺,不僅可以實(shí)現(xiàn)開發(fā)組件的可視化,還實(shí)現(xiàn)了邏輯的可視化。飛算 SoFlu 軟件機(jī)器人首先解決的是后端微服務(wù)開發(fā),用戶繪制可視化流程的過程,即是微服務(wù)開發(fā)的過程,業(yè)務(wù)邏輯的設(shè)計(jì)完全由可視化的方式展現(xiàn)出來,并可通過與前端全自動開發(fā)平臺、全自動測試平臺和全自動運(yùn)維平臺的聯(lián)動,大大提高 DevOps 團(tuán)隊(duì)開發(fā)、測試、運(yùn)維 全流程的工作效率,實(shí)現(xiàn)一“人”全棧解決:后端開發(fā)、前端開發(fā)、測試、運(yùn)維。
監(jiān)控和報(bào)警工具
DevOps 持續(xù)集成和持續(xù)部署的實(shí)現(xiàn)離不開持續(xù)監(jiān)控的輔助作用。許多微服務(wù)都是由數(shù)百個組件組合而成,其中一個服務(wù)的故障可能導(dǎo)致整個系統(tǒng)崩潰。當(dāng)然,手動找到核心故障問題是很復(fù)雜和耗時(shí)的。其中一個解決方案就是持續(xù)監(jiān)控關(guān)鍵特征,如 RAM 使用、請求數(shù)量、異常數(shù)量和存儲空間。因此,需要根據(jù)系統(tǒng)的關(guān)鍵特性設(shè)置一個警報(bào)系統(tǒng)。例如,當(dāng)存儲空間使用率達(dá)到 80% 時(shí)應(yīng)該觸發(fā)警報(bào),以便 DevOps 運(yùn)維開發(fā)人員可以在整個系統(tǒng)崩潰之前解決問題。
常用的監(jiān)控報(bào)警工具包括 ELK 技術(shù)棧(E=ElasticSearch,L=Logstash,K=Kibana)、Prometheus 等。
上述每種工具在現(xiàn)代 DevOps 流程中都有特定的用途,DevOps 工程師需要確保這些常用的開發(fā)工具在整個研發(fā)流程中都能很好地融合在一起,因此熟悉每個工具的作用以及考慮提前準(zhǔn)備好這些工具的依賴項(xiàng),是 DevOps 交付鏈的關(guān)鍵。
當(dāng)然,以上提到的這些工具可能并不完全。技術(shù)工具一直在飛速迭代,保持對新技術(shù)的敏感性和持續(xù)的學(xué)習(xí)熱情也是一名優(yōu)秀的工程師應(yīng)該具備的能力之一。
三、具有成熟編碼標(biāo)準(zhǔn)的特定編程技能
雖然編程能力是每個開發(fā)者最基本的能力,但 DevOps 工程師在這方面仍然有一些更特殊的要求。
通常來說,DevOps 工程師需要在專精 1-2 門編程語言的基礎(chǔ)上熟悉多種語言,例如 Java、JavaScript、Ruby、Python、PHP、Go 等,這是由微服務(wù)時(shí)代同一系統(tǒng)不同服務(wù)可以由不同語言、不同框架實(shí)現(xiàn)的特性而決定的。DevOps 工程師至少需要了解這些語言的特性并具備在操作系統(tǒng)環(huán)境中編寫和調(diào)試它們的能力。
DevOps 工程師應(yīng)該應(yīng)用這些編碼技能來編排盡可能自動化的穩(wěn)定高效的 pipeline,或者構(gòu)建可以自動化 pipeline 中的各個階段的新工具,以優(yōu)化團(tuán)隊(duì)的研發(fā)流程。
更重要的是,DevOps 工程師必須掌握測試自動化的實(shí)踐。這需要首先用多種語言編寫干凈的代碼,然后確保您的代碼與其他團(tuán)隊(duì)開發(fā)的代碼完美集成——通常是在不同的環(huán)境中創(chuàng)建的。
四、與 QA 團(tuán)隊(duì)同步
考慮到 DevOps 代碼長期頻繁迭代的特性,DevOps 工程師必須始終與 QA 團(tuán)隊(duì)保持同步。DevOps 工程師必須了解所有測試活動,包括自動和手動測試活動,以確保組織滿足發(fā)布日期和結(jié)果的 sprint 目標(biāo)。DevOps 工程師應(yīng)該了解團(tuán)隊(duì)中所有發(fā)生的測試活動,整個 CI/CD 周期的測試歷史和由 QA 決定的開發(fā)框架/環(huán)境。
有了這些知識,DevOps 工程師可以確定部署和優(yōu)化的相關(guān)步驟,并確定是否有 QA 活動、工具和框架可以重用于 DevOps 中的其他任務(wù),例如重現(xiàn)生產(chǎn)問題、使用特定測試環(huán)境和訪問QA 使用的平臺。
值得一提的是,轉(zhuǎn)向 DevOps 并不意味著 DevOps 工程師必須自動化一切,在一些必要的方面手動測試仍將繼續(xù)發(fā)揮作用,即使在快速發(fā)展的 CI/CD 環(huán)境中也是如此。與任何其他自動化任務(wù)一樣,自動化 100% 的測試活動是不切實(shí)際的,DevOps 工程師必須為手動和引導(dǎo)式探索性測試留出空間并保持開放的心態(tài)。
五、技術(shù)支持和維護(hù)技能
優(yōu)秀的 DevOps 工程師不僅需要開發(fā)方面的技能,有時(shí)還需要為客戶提供維護(hù)和技術(shù)支持。這意味著 DevOps 工程師應(yīng)該樂于為內(nèi)部和外部客戶提供支持,并在出現(xiàn)問題時(shí)進(jìn)行故障排除。
總結(jié)
隨著市場的不斷發(fā)展,DevOps 工程師的角色自然而然地會承擔(dān)更多責(zé)任——尤其是來自開發(fā)技能本身以外的部分,而善用工具,不斷提升自己的綜合能力,能夠幫助工程師在 DevOps 時(shí)代獲得更強(qiáng)的競爭力。