DevOps 是敏捷開發(fā)的產(chǎn)物,也越來越受到谷歌、Facebook、亞馬遜等大型企業(yè)的關(guān)注。
因此,當你要申請 DevOps 工程師崗位時,除了所需的專業(yè)技能外,準備充分的 DevOps 工作面試,對于成功拿到Offer也至關(guān)重要。
DevOps 是什么
什么是 DevOps?
簡而言之,DevOps 意味著組織中開發(fā) (Dev) 和運維 (Ops) 團隊之間的協(xié)作,通過持續(xù)集成和持續(xù)交付,為用戶提供更好的產(chǎn)品。因此,它可以降低軟件開發(fā)和運維團隊之間的風險,有助于提高交付速度,增強企業(yè)的市場競爭力。什么是持續(xù)集成?
持續(xù)集成 (CI) 是一個開發(fā)過程,每天多次將代碼集成到共享存儲庫中。借助自動化測試,CI 幫助允許團隊及早識別錯誤、輕松定位問題,提高了軟件質(zhì)量并縮短了交付時間。什么是持續(xù)交付?
持續(xù)交付 (CD) 與持續(xù)集成相集成,以向用戶順利交付產(chǎn)品。它旨在確保代碼可以安全地部署到生產(chǎn)環(huán)境中。在 CD 環(huán)境中,無論是大型系統(tǒng)還是復雜的應用程序,新版本都可以立即按需執(zhí)行,功能齊全,而且只需要極少的人工干預。什么是持續(xù)部署?
持續(xù)部署進一步推進了持續(xù)交付,其中代碼被構(gòu)建、部署到生產(chǎn)環(huán)境、還可以自動測試并在發(fā)生錯誤時快速回滾。具體來說,每個更改都會直接部署到生產(chǎn)環(huán)境中,無需額外的人工干預。什么是持續(xù)測試?
持續(xù)測試是軟件交付流水線的一部分。在 CI/CD 工作流中,構(gòu)建往往以小批量進行。因此,為每次構(gòu)建,手動運行測試用例會非常耗時。持續(xù)測試借助自動化手段,盡早、逐步和充分地執(zhí)行測試,從而減輕手動工作的負擔。這逐漸成為 DevOps 文化的關(guān)鍵。什么是版本控制?
版本控制(或源代碼控制)是一個軟件工具系統(tǒng),能夠記錄和檢查代碼隨時間的所有變化。版本控制能夠跟蹤每個代碼開發(fā),允許開發(fā)人員在出現(xiàn)任何錯誤時回滾,還可以與以前的版本進行比較,來最終確定最佳版本。什么是 Git?
Git 是一個版本控制系統(tǒng)。早期出現(xiàn)的版本控制系統(tǒng)有:SVN、CVS等,它們是集中式版本控制系統(tǒng),都有一個單一的集中管理的服務器,保存所有文件的修訂版本,而協(xié)同合作的開發(fā)人員都通過客戶端連接到這臺服務器,取出最新的文件或者提交更新。
而Git 是分布式版本控制系統(tǒng),沒有中央服務器的概念,我們使用相關(guān)的客戶端提取的不只是最新的文件,而是把代碼倉庫完整地鏡像下來,相當于每個人的電腦都是一個完整的版本庫,這樣的話,任何一處協(xié)同工作的服務器出現(xiàn)故障,都可以用任何一個本地倉庫恢復。
實施 DevOps 的原因
- 為什么 DevOps 很重要?DevOps 如何使團隊受益?
如今,組織正試圖通過其強大的部署系統(tǒng),將產(chǎn)品快速交付給用戶,以跟上各種競爭對手的步伐。
這就是 DevOps 出現(xiàn)的地方。DevOps 能夠為整個軟件開發(fā)流水線提供敏捷性和靈活性,快速將產(chǎn)品交付給用戶。
- DevOps 對開發(fā)人員有什么幫助
如果沒有 DevOps,開發(fā)團隊會從頭開始進行新代碼開發(fā),構(gòu)建,等待運維團隊進行部署。然后,等待反饋。如果有錯誤,他們將不得不返回并重新修復它。團隊之間所需的溝通是無法估量的。
DevOps 將開發(fā)人員的任務縮減為僅編寫代碼,借助CI/CD 流水線接管其余任務,包括整合和自動化。DevOps 還使所有團隊成員都可以訪問流程,從而使團隊協(xié)作中的溝通更加透明。
- 為什么 DevOps 最近在軟件交付中越來越受歡迎?
DevOps 近年來流行的主要原因是它允許組織簡化所有軟件流程并將其轉(zhuǎn)化為商業(yè)價值。
隨著技術(shù)的快速創(chuàng)新,DevOps 和敏捷方法被廣泛采用以促進動態(tài)運維,而不是落后于其他人。Facebook、Google 和 Netflix 的成就證明了 DevOps 在持續(xù)部署方法中的應用,沒有任何中斷。
可以查看《為什么 DevOps 很重要》,了解更多信息
- CI/CD 的好處是什么?
CI 和 CD 將所有代碼更改整合到一個共享存儲庫中并自動化操作。CI/CD 是現(xiàn)代開發(fā)環(huán)境的支柱,產(chǎn)品可以根據(jù)客戶期望快速、高效和自動地更新。
簡而言之,精心設(shè)計的 CI/CD 流水線幫助企業(yè)從更快的發(fā)布和可靠性中,獲得極大的客戶滿意度,同時減少代碼更改和缺陷。
- 持續(xù)交付有哪些好處?
團隊過去常常通過手動方式發(fā)布代碼,來實現(xiàn)產(chǎn)品的迭代。但是,有時新版本意味著具有特定業(yè)務目標的促銷策略。
CD 使 IT 專業(yè)人員能夠自動執(zhí)行重復性和乏味的任務,在確保合規(guī)性和安全實踐的同時,幫助團隊節(jié)省了時間。
- 持續(xù)部署有哪些好處?
通過評估拉取請求并將它們組合到主分支,持續(xù)部署為開發(fā)人員提供了對流水線末端產(chǎn)品的的關(guān)注。它允許企業(yè)快速部署、驗證新功能,并在測試自動化完成后立即做出響應。
有了持續(xù)部署流水線,一旦客戶提交質(zhì)量問題,團隊就可以輕松處理新版本的錯誤,因為每個版本都是小批量交付的。
如何有效實施 DevOps
- 典型的 DevOps 工作流程
DevOps 工作流程可以分為 4 個階段:
版本控制:存儲和管理不同版本的源代碼。
持續(xù)集成:該階段使開發(fā)人員能夠在進行單元測試和集成測試之前,構(gòu)建組件、組裝和驗證它們。
持續(xù)交付:持續(xù)集成的下一步是,使發(fā)布和測試過程完全自動化。目標是快速、可持續(xù)地發(fā)布更新軟件。
持續(xù)部署:在每個應用程序滿足所有測試要求后,它會自動部署到生產(chǎn)環(huán)境中,以進行更小、更頻繁的發(fā)布,無需任何人工干預。
- DevOps 的核心操作是什么?
DevOps 的核心操作包括:
軟件開發(fā):
構(gòu)建代碼
代碼覆蓋率
單元測試
打包
部署
基礎(chǔ)設(shè)施:
預置
配置
編排
部署
- 團隊在實施 DevOps 之前需要考慮哪些預防措施?
DevOps流程在實施之前應該采取一些預防措施,否則可能會降低組織的生產(chǎn)力:
DevOps 不是僅僅應用新工具、建立一個新的“部門”,實際上,DevOps 是一種不斷發(fā)展的文化,其中開發(fā)和運維團隊基于某個框架,共同協(xié)作處理整個應用程序生命周期。
企業(yè)有必要為其 DevOps 實踐,構(gòu)想出戰(zhàn)略愿景。DevOps 計劃會顯著改變開發(fā)和運維團隊之間的協(xié)作,因此,如果從一開始就按照明確的指導方針制定清晰的DevOps 路線圖,就可以消除有歧義的溝通。
成功應用 DevOps 后,應在整個組織中推廣持續(xù)學習和改進的文化。不斷總結(jié)系統(tǒng)中可能存在的故障和問題,將其存儲為團隊的經(jīng)驗教訓,以防止這些錯誤重復發(fā)生。
- SCM 團隊在 DevOps 中扮演什么角色?
軟件配置管理 (SCM) 負責在軟件開發(fā)生命周期中,系統(tǒng)地組織和管理變更的過程。
在 DevOps 中,SCM也是基于基礎(chǔ)設(shè)施即代碼的理論,它在簡化開發(fā)人員的任務方面發(fā)揮著關(guān)鍵作用,因為他們可以自動保存每個配置過程的記錄,這些記錄現(xiàn)在以機器可讀的形式自動復制和系統(tǒng)化。
- 質(zhì)量保證 (QA) 團隊在 DevOps 中扮演什么角色?
由于 DevOps 文化在創(chuàng)新組織中很容易被接受,因此 QA 團隊在當今的自動化世界中的作用似乎較小。
然而,接受 DevOps 并不意味著 QA 職責的結(jié)束,而是意味著 QA 正在不同的工作環(huán)境中擔任不同的角色,需要不同的專業(yè)知識。因此,他們當前的戰(zhàn)略角色是構(gòu)建強大的軟件測試基礎(chǔ)設(shè)施,同時跟上不斷變化的趨勢。
在 DevOps 方法中,QA 將與開發(fā)和運維團隊的職責聯(lián)系在一起,以確保持續(xù)交付的穩(wěn)定性。
- DevOps 使用了哪些工具?描述你使用任何這些工具的經(jīng)驗。
在 DevOps 環(huán)境中,不同的工具能夠支持產(chǎn)品開發(fā)的不同階段。DevOps 最常用的工具可以分為 6 個關(guān)鍵階段:
持續(xù)開發(fā):Git、SVN、Mercurial、CVS、Jira
持續(xù)集成:Jenkins、Bamboo、Hudson
持續(xù)交付:Nexus、Archiva、Tomcat
持續(xù)部署:Puppet、Chef、Docker
持續(xù)監(jiān)控:Splunk、ELK Stack、Nagios
持續(xù)測試:Selenium,Katalon Studio
- DevOps 中如何管理變更?
變更管理計劃需要通過 DevOps 來實施,可以將變更集中到一個平臺,簡化管理過程中的變更、問題和事件。然后,通過透明的標準,確保組織內(nèi)部信息交換的協(xié)作和準確性。
如何有效實施 CI/CD
- CI/CD 的一些核心組件是什么?
存儲庫管理工具作為版本控制系統(tǒng)起著關(guān)鍵作用,以確保 CI/CD流程的穩(wěn)定,開發(fā)團隊可以在構(gòu)建軟件的同時管理每一個更改。
在版本控制系統(tǒng)中,在一個項目中工作的不同開發(fā)人員進行開發(fā),修復,而不會對所有團隊成員造成任何干擾。
持續(xù)測試和自動化測試是形成完整的CI/CD生態(tài)系統(tǒng)的兩種重要測試類型。自動化測試可以應用于產(chǎn)品開發(fā)的所有階段(包括單元、集成和系統(tǒng)測試),以運行包括性能、可用性、負載、壓力和安全在內(nèi)的所有過程。
CI/CD 的一些常見做法是什么?
發(fā)展 DevOps 文化。
持續(xù)集成。
在每個環(huán)境中平等地實施。
失敗后能夠再次繼續(xù)你的流水線。
版本控制。
記錄你的持續(xù)交付實踐。
保障 CD 流水線暢通無阻。實施 DevOps會發(fā)生什么?
采用DevOps后,將會重塑軟件開發(fā)文化,包括工作流程、組織結(jié)構(gòu)到基礎(chǔ)設(shè)施。因此,公司應該準備好應對執(zhí)行 DevOps 產(chǎn)生的重大變化。常見的 CI/CD 工具有哪些?
Visual Studio:可以將成熟的 DevOps 系統(tǒng)與敏捷開發(fā)、源代碼控制、自動化測試和部署,以及監(jiān)控相集成。
TeamCity:是一個構(gòu)建管理和持續(xù)集成的服務器,它還支持統(tǒng)計測試覆蓋率。
Jenkins:一個開源 CI 服務器,使開發(fā)和運維團隊能夠可靠地構(gòu)建、測試和部署軟件。它還可以與各種儀表板插件相關(guān)聯(lián)。
GitLab:可以為用戶提供高效的持續(xù)集成和部署,還支持輕松定制。GitLab 通過更快的代碼傳送、錯誤識別和功能恢復來幫助 CI/CD 團隊縮短開發(fā)周期。
Bamboo:是一個持續(xù)集成服務器,可用于自動化管理產(chǎn)品的發(fā)布,還可以記錄所有部署信息,并在整個持續(xù)交付流水線中實時提醒錯誤。高效的持續(xù)集成工作流程是什么樣的
包括以下關(guān)鍵步驟:
將項目的源代碼合并到一個存儲庫中并進行維護。
自動化構(gòu)建和集成。
自檢。
定期更新對基線的更改
將所有提交添加到基線
快速構(gòu)建
可以在準生產(chǎn)環(huán)境中運行測試
輕松獲取最新的可交付成果
可以輕松地監(jiān)控構(gòu)建結(jié)果
自動化部署
DevOps和其他產(chǎn)品之間的差異
- 敏捷和 DevOps 之間的主要區(qū)別是什么?
簡而言之,DevOps 與 Agile 相結(jié)合,可以更快地將軟件功能部署到生產(chǎn)環(huán)境中。敏捷促進了在軟件開發(fā)方面的協(xié)作,以及在復雜流程中高效地進行小型的快速發(fā)布。DevOps 是一種將開發(fā)和運維團隊在溝通、集成和協(xié)作中聚集在一起的實踐。
敏捷和 DevOps 相輔相成,形成了一個無縫的產(chǎn)品開發(fā)生命周期:敏捷原則構(gòu)建并推動產(chǎn)品的創(chuàng)新,而 DevOps 應用工具來管理敏捷產(chǎn)品的交付。
- 持續(xù)集成、持續(xù)交付和持續(xù)部署之間有什么區(qū)別?
持續(xù)集成 (CI) 是一種每天多次將所有開發(fā)人員的所有代碼合并到中央存儲庫的實踐。這意味著自動測試新代碼并快速檢測和修復錯誤。
持續(xù)交付使 CI 更進一步,確保軟件隨時準備好進入生產(chǎn)環(huán)境。因此,CI 可以被視為持續(xù)交付必不可少的,它是 CI/CD 流水線的一個重要部分。
公司無需手動操作即可使用持續(xù)部署。每次代碼通過測試后,都會自動發(fā)布到生產(chǎn)環(huán)境中。
持續(xù)集成、持續(xù)交付和持續(xù)部署是 DevOps 實施的關(guān)鍵階段。
- 持續(xù)交付和持續(xù)部署之間有哪些根本區(qū)別?
持續(xù)交付監(jiān)控中央存儲庫分支中發(fā)生的代碼更改,這些更改將為部署做好準備,同時允許開發(fā)人員決定何時交付新的更改或功能。
其次,持續(xù)部署能夠確保所有更新和錯誤修復從測試階段自動部署到生產(chǎn)環(huán)境,無需人工干預。
29、持續(xù)集成和持續(xù)交付有什么區(qū)別?
持續(xù)集成可以確保軟件組件之間的緊密關(guān)聯(lián),有助于代碼提交得更頻繁,并且可以連接多個開發(fā)人員的代碼。
持續(xù)交付是 CI/CD 流水線中的進一步的步驟。代碼不斷合并到共享存儲庫中,然后不斷進行測試。一旦代碼構(gòu)建完成,就會進行測試,以便提前檢測到盡可能多的錯誤。
- DevOps 和持續(xù)交付有什么區(qū)別?
DevOps 是一種組織范式,它能夠在開發(fā)和運維團隊之間實現(xiàn)高效的協(xié)作和溝通。
同時,持續(xù)交付被認為是 DevOps 實施軟件部署的最佳實踐,有助于增強應用新版本的可靠性。
DevOps 的主要目標是有效地整合 Dev 和 Ops 角色,消除所有孤島,并實現(xiàn)你自己在持續(xù)交付中獨立的業(yè)務目標。借助持續(xù)交付加強協(xié)作并簡化了組織的統(tǒng)一產(chǎn)品開發(fā)周期。
- 敏捷、精益 IT 和 DevOps 之間有什么區(qū)別?
敏捷旨在優(yōu)化軟件開發(fā)、構(gòu)建持續(xù)交付、最小化反饋循環(huán)并在軟件開發(fā)生命周期 (SDLC) 中促進團隊協(xié)作。
精益 IT 是精益原則的延伸,用于簡化產(chǎn)品開發(fā)周期。精益強調(diào)消除冗余工作流程以最大化整個產(chǎn)品的價值。
與此同時,DevOps 打破了軟件開發(fā)過程中 Dev 和 Ops 團隊之間的壁壘。它旨在實現(xiàn)自動化工具和 IT 專業(yè)人員之間有效合作,創(chuàng)建更簡單的自動化流程。
你現(xiàn)在有信心征服下一次 DevOps 面試了嗎?
DevOps 面試問題還有很多 ,限于篇幅尚未在本文中研究,如果你有更好的問題和答案,歡迎留言交流。