【DevOps 線 02】那個Code不是我弄壞的!!持續整合與版本控制策略

在這今天的影片當中我們將會針對碼農的日常生活開發中是如何來確保程式品質並確保程式不是你弄壞的大家好我是Tomas,我旁邊這位是Poy大家好我是Poy我來自angular社群同時也是微軟最有價值專家想請問一下你是怎麼樣確保別人不會把你的程式碼給弄壞其實這個問題首先要先問你有沒有習慣做版控這件事版本控制是整個開發過程中非常重要的一個基礎技能他同時也是團隊協作的一個很重要的根基它能幫助我們做到持續整合這件事情那有版本控制作為我們的專案的基礎我們就可以在持續整合的過程中不用擔心是誰把code弄壞的甚至我們可以知道是誰把這行code弄糟的在這次的影片我們會聊到幾個版本控制的策略我們可以幫助團隊去找到一個適合他們的開發工作流程跟寫作的方式第一個版本控制策略呢是屬於本機型的版本控制還沒有把控系統之前呢我們經常會做一件事情就是把整個專案給複製壓縮成一個壓縮檔然後在上面會標日期啊這件事情然後通過這樣的方式來達到我們版控的目的但是這樣子的做法會有一些問題就是你不會知道說你這個壓縮到裏面到底有什麼東西或是你這一次的版本你到底修改了什麼那就會有一些嗯你很難去掌握版本品質的狀況後來一些版本的工具已經發展到了例如Subversion、Git可以讓我們在本機上面去做一些ㄇ版本控制動作那這樣的情境非常適合在個人專案呢或者是經營專案上我們只能在自己本機上面做版控的時候使用當然因為他在本機上面去做把控也大幅度限縮寫作的能力所以當遇到中大型專案的時候我們就會發現一個人力量相當有限協助開發的流程是越來越必要了一種基於網絡為連接的集中式版本控制系統就應運而生這一類型的版控系統就有的一個權限管理機制你可以很細很細緻化的去設定你的版本控制要給誰使用誰能做什麼事情、誰能去提交這個程式碼這些事情都可以在其中式的版本控制系統做到微軟team fundation version control這個系統它是屬於這一類型的集中式版本控制系統分散式版控的代表Git在2005年之後由Linus
Benedict Torvalds釋出之後現在已經攏絡了很多開發者的心分散式這個這個詞的意思呢它代表了一件事情每一位開發者可以在自己的本機上面保留一份完整的版本控制庫透過網絡連接你可以跟世界各地的開發者做一個版控庫的整合合併同時也提供了本機的版本控制跟多人協作的能力這一類型的版控系統他有較好的分支和合併能力所以這樣子的一個能力呢我們可以發展出各式各樣的工作流程來達到我們團隊的開發協作開發過程中的策略這裏我簡單提到一個Git Flow分支開發策略這個分支開發流程呢是由2010年的時候由荷蘭的開發者Vincent所提出來的能夠幫助開發人員在團隊裏面更容易的做協作這樣他會有一個主要分支是屬於master跟developMaster是永遠屬於production ready的狀態那develop則是最新的開發成果都會在這個分支上面每一位開發者會基於這個develop分支去延伸出新功能的分支去做開發等新功能都開發完成之後再合併為這個develop去做一個發佈那請你去看整個Git
Flow開發流程策略他其實蠻複雜的一件事情對一些小型團隊或者是你的專業其實沒有那麼複雜的時候你會覺得這個開發工作流程會相當的繁瑣那其實我們可以參考這個很完整的開發流程去挑選出適合我們自己團隊可以用哪一些策略或方法去幫助我們去找出我們組織或團隊組織和團隊的工作特性做調整嗯哼那像這種Git Flow在自己的日常生活工作當中啊你們有什麼樣的案例可以分享一下像譬如說我們有一個測試的team他們專門在做品質測試在做品質測試的時候如果他直接去使用production的code那很奇怪因為也不能去修改那個分支的東西所以說我們會特意拆QA的分支出來專門建置做給QA的team做使用做測試所以像這樣的這樣類型的策略呢就可以去套用在其他目的上面說不管是先要做測試也好給user做測試你就可以在這個分支上面那如果說你是要做產出release的版本控制的時候你可以藉此去拆開一個新的分支出來去做管理那像這樣的流程策略應該是越早制定越好你越早去制定這個策略你就可以幫助團隊去追隨這個規範減緩之後專案成長過程中所帶來的痛苦專案程式碼有版控的根基在自動化整合的環節裏面我們就可以去玩出很多花樣可以通過自動化的方式來加速我們的品質改善的循環這張是很經典的DevOps流程圖他從計劃、開發、建置、測試、發行、部署、上線到監控如果每一個環節我們要通過手動的方式去做處理的話那是相當沒有效率那我們應該通過一些自動化的工具去幫助我們去改善工作流程的效率提升成果的品質那以往我們會為了確保我們專案的品質可能會透過一些單元測試、整個測試或著是找人來幫我做code review那找這些人可能是一些比較經驗老道的開發人員他才知道說那些junior到底在程式碼裏面做了哪些蠢事情是誰有可能搞壞這個專案透過code review去找出來那透過code
review這件事情其實是相當耗神費力的而且你要找到一個經驗老道的開發者去幫你看這件事情他那麼有價值然後每天再幫你看這個他不去做一些更有價值的創造然後去看新鮮人寫的程式碼那其實是有一點不符合成本的所以如果我們今天能夠透過自動化的方式去分析哪一些程式碼是不符合團隊開發規範的或者是找出專案中的程式碼有哪些可能會發生漏洞的地方那我們就能更有效率提升我們的專案品質我們就通過一些自動化的方式去做code review這次我們會帶一個demo是在VSTS的服務上面去搭配一個自動化code review的工具SonarQube來帶我們做到自動化品質分析那這邊是我們VSTS上面的服務我們在這上面做一個形成一個建制在旁邊的Builds這個功能裏面去建立一個新的專案那這個建置它的程式碼來源可以有很多個地方像比如說可以從VSTS上面的git或著是從github上面去把你程式碼給拉下來因為這邊我有先跟我的程式碼做好連接所以我可以從這邊很簡單的就找到我想要這是想要建置的專案這一個這個專案是使用.Net
Core那在選擇我們要建置的分支那通常我們在做這樣子的資訊整合的時候你會設在哪一個地方比如你在master上面或在你的feature branch上面這其實是因情境而異啊如果你今天是要做每一次開發的測試的時候你就選擇develop分支去做需求開發建置然後去做去找出你的開發過程中有沒有一些測試是fail的或者是如果你今天想要給QA team去做一個整個把環境建置起來去做一個測試執行做個整合測試的時候你就可以單獨拉一個QA的分支去給他們做使用那這個自動化建設的流程就可以把QA上面的程式碼建立完之後直接部署到你的測試環境裏面去所以這個東西因情境而異的他在這邊點擊下一步之後呢我們可以看到在VSTS上面提供了很多建制的版本那我們這邊選擇空白的我們從頭開始做在這一個自動化建置流程裏面我們可以在裏面添加.Net
Core的任務因為這是一個.Net Core專案那在.Net
Core的裏面要去做建置的動作我們要先把我們的相應的套件給restore回來然後接着做建制再來我們要增加品質分析的任務所以我們搜尋SonarQube就出現這三個任務那這三個任務如果你沒有看到的話可能是因為你還沒有安裝SonarQube的擴充套件所以安裝完就會看到這三個任務了那我先把這三個任務都加進來調整一下這樣的一個建置任務他其實會先這個還原我們相應的套件接着去設定這個專案在自動化建設的時候跟SonarQube的連接的一些設定值接着做轉案建置跟真正去執行這件事情做程式碼品質的分析最後把我們分析的結果顯示在我們的DS報表上面那在建置這邊我們可以選擇已經設定好SonarQube在哪裏並且輸入我們的project keyproject key他對SonarQube來講是一個唯一值那project name是在SonarQube的平台上面我們可以看到這個名稱這邊就一樣打這樣其實就設定完成那我這邊附帶提一下其實SonarQube他除了可以分析.
Net的專案之外他也可以透過msbuild分析java的專案甚至如果你是有一些前端想要做品質分析的話比如說angular專案你也透過這個standolone scanner掃描你的前端專案這邊設定完成之後我們就把它儲存跟queue讓他去自動化系去跑一次我們這個建置流程我剛完成建制之後呢我們可以從這個timeline的頁籤去看到在這個過程中幫我們分析了它這個品質狀態Quality gate他整個專案的品質有沒有符合我們的一個質量法的標準那如果說你想要更進一步知道說SonarQube分析了哪些東西或者是我們這些專案中有哪些問題是出在哪裏我們可以先點這個詳細的報表連到SonarQube的網站上那這裏SonarQube的網站上面是不是每次建置的結果都會放在這裏呢他每次的建置結果都會放在這裏而且你可以從這邊專案活動裏面就知道說你什麼時候建置的以及建置的時候有發生了一些bug或者是一些漏洞是出現有多少有計量在這邊可以看到他整個建置到底是發生什麼回事那這個報表裏面我們還可以知道說他會列出一些評定的標準一些等級比如說我這邊都沒有出現bug雖然是屬於A等級亮很深的綠燈當他發現一些比較輕微的一些漏洞的時候它就當是出來這邊有十個漏洞那身為開發人員看到這樣的漏洞就可以點進去去看說他到底幫我標示哪些東西我可以去做哪些品質上的改進像這邊因為我專案比較小它所標示的問題比較簡單像這個只是一個存儲修飾值的一些問題他建議我把public轉成private你可以看到它是細到哪一行你這問題出現在這一行她建議你去把這行改掉那我們剛剛在VSTS上面有看到質量閥的燈號這件事情其實像這個燈號呢其實他是在看以在這邊做設定的點進去之後他預測有這些度量去計算這個燈是要亮什麼樣的燈像譬如你的覆蓋率必須錯誤是小於80%或着你的程式碼維護率必須要必須要在A的等級上那如果說你想要更進一步的知道說SonarQube去分析的什麼怎麼樣的程式碼規則你可以在上面的程式碼規則中去找到每一個語言他所建立的程式碼規則像譬如說隨便找一條這個來GC.Collect
should not be called就說我們不應該去手動的去執行GC這件事情而GC這件事應該是交給.
Net Runtime那如果說你要去執行這個指令的話它就把它標示出來顯示為這是一個異位或許不應該這樣子做好那謝謝Poy給我們帶來這次的demo那各位如果說對於這這次錄音當中所有的實作細節有興趣的話可以參考簡報當中的這個鏈接那個簡報也隨附在影片當中給提供下載謝謝Poy謝謝