我們之前已經聽到很多談論DevOps和DevOps世界的最新趨勢的事情,但是就DevOps工程師本身,到底幹些什麼呢?
在最純粹的存在形式上來說,DevOps工程師是為了加快開發和運營團隊之間的交付效率而存在的橋樑。
DevOps工程師在軟體生命週期中能帶來什麼?
在傳統的交付週期中,軟體開發人員會在經年累月的編寫程式碼後,將軟體交給QA團隊進行測試,然後將最終版本交給運營團隊部署。這三個階段,即開發,測試和部署之間是缺乏協作的。
開發編寫的程式碼最終並交給運維團隊,然後運維團隊來解決程式碼部署過程中出現的問題,或者將程式碼交還給開發團隊來解決遇到的問題。所有這些都導致了軟體開發過程的放慢。
但是在DevOps模式下,這三個團隊不再孤立。大多數時間內,從開發、測試、部署到運營,相關的工程師合併成一個團隊並且貫穿整個軟體生命週期,開發不再限制於某一個技能而是一整套技術解決方案。當然安全團隊也因此有可能在這個軟體生命週期中與開發和運營更緊密地工作,及早發現安全問題。
為什麼DevOps工程師的角色各不相同呢?
DevOps工程師並不是什麼新鮮事物。比如系統工程師,自動化工程師,軟體工程師,Linux工程師等等工程師都能成為DevOps工程師。
但是,DevOps工程師的工作性質因組織而異。比如有些是在基礎設施自動化和維護中發揮作用,而在另外一些組織中卻是在整個交付鏈中發揮作用而已。
DevOps工程師的角色各不相同,因為他必須通過克服傳統協作障礙與開發和運維人員進行協作。而不同的組織有不同的障礙,因此其扮演的角色自然不同。
DevOps工程師日常工作中最重要的兩個方面
儘管DevOps工程師的角色各不相同,但幾乎所有DevOps工程師每天都會觸及兩件事 - 自動化和持續整合。
自動化:
與維護基礎設施有關的大部分任務仍然是手動的。公司更喜歡使用傳統的經過驗證的方法,而不是自動化相同的流程,因為他們不想冒任何風險。但事實是自動化任務將有助於更快速地開發和部署軟體,這意味著能加快公司從客戶處賺取利益的速度。
為了闡述清楚這一點,我們可以考慮下面這個情況,系統工程師如果每天按要求手動備份所有服務兩次,那麼他可以通過在雲端設施上編寫指令碼來完成這項工作而不是浪費時間來完成這項工作。通過自動執行備份過程,您可以讓系統工程師更專注於重要的事情,例如對由於某些因為虛擬機器問題而需要關閉的服務進行故障排除。手動執行相同的操作會導致您的系統工程師的負擔過重,而這些工程師的效率將大大降低。這只是一個非常簡單的例子,通過不實施自動化來闡述資源浪費的概念。
DevOps因此可以作為敏捷的擴充套件,因為它可以降低由於開發人員、QA和運維團隊之間的非協作而可能出現的風險。DevOps通過認識到高質量的軟體開發要求包括質量保證和運營專家在內的所有利益相關方的持續參與和反饋,擴大了敏捷原則的範圍。
有很多事情可以通過自動的方式來完成,比如在釋出新的補丁的時候更新ApacheWeb伺服器,更新部署在伺服器上的開源軟體的版本。
DevOps工程師可以通過建立指令碼環境自動完成配置伺服器的過程。您可以在一個節點上執行指令碼,但如果在數千上百個節點上手工執行相同的指令碼將變得不切實際。指令碼在這裡就變得不再是一個可擴充套件的解決方案了。
因此,需要以可擴充套件的方式跨大量節點自動化進行軟體配置、配置管理和應用程式部署。這是配置管理工具(如Chef,Puppet和Ansible)在DevOps世界中派上用場的地方。
持續整合:
關於DevOps的另一個重要方面是在軟體開發實踐中實施持續整合(CI), CI允許開發人員不斷更新自動化構建、測試使用到的資源庫。
持續整合系統通常包含一個可以持續監控版本控制系統的工具。只要檢測到對版本控制系統的更改,系統就會自動構建並測試您的應用程式。如果構建或測試沒有通過的,系統會立即通知開發人員解決問題。
持續整合可確保持續交付,因為所有程式碼更改都會不斷部署到構建階段之後的測試和生產環境中。
通過持續整合,開發人員可以從人工任務中解脫出來,提高工作效率,因為現在在CI中以自動化方式完成自動構建任務,並且由於更加頻繁的測試,錯誤和bug更容易找到和解決,從而終端使用者的更新可以更快,更頻繁地進行。
有不同的產品和工具可以幫助您在組織中實現持續整合。有些工具可讓您將CI 伺服器託管在您自己的網路基礎架構中。最受歡迎的是從Sun的Hudson專案更名為Jenkins的工具。
還有一些其他託管的CI產品,如完全託管在雲中的CircleCI和Travis CI.這些託管的CI產品越來越受到小組織的歡迎,因為它使工程團隊能夠儘快開始持續整合。
總結
DevOps工程師扮演的最重要角色是彌合軟體開發和運營團隊之間的差距,提高軟體交付速度。儘管DevOps工程師在組織中的角色各不相同,但有兩個共同點:自動化和持續整合。