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