E-PAPER

訂閱 / 取消電子報,請輸入下列資料:

*您的大名

*公司名稱

*電子郵件

*使用類別

送出 重填

top
GO TOP

CONTACT

歡迎蒞臨巨鷗科技網站,若有任何智慧科技服務、行銷服務或 其他問題,請寫下寶貴意見,我們將盡速與您聯繫,謝謝您!

*您的大名

*性 別

*電子郵件

*連絡電話

手機號碼

服務單位

職 稱

*詢問事項

*您的意見


備註:有「*」之記號者,敬請務必正確填寫。
送出 重填

Column跨界專欄

跨界專欄

透過【持續整合】讓軟體的產出更有品質與保障

撰文者: 智慧城鄉處 技發一群 協理 林威佐(Joe)

 

▲ 開發流程與 CI/CD 之關聯說明

敏捷軟體開發(Agile Software Development),是一種從 1990 年代開始逐漸引起廣泛關注與運用的新型軟體開發方法,能應對需求快速變化的軟體開發能力,強調開發團隊與客戶之間的緊密協作、面對面的溝通比書面的文件更有效、頻繁交付新的軟體版本、成熟且自我管理的組織團隊。總體來說敏捷開發有兩大核心:

 

1. 擁抱變化

2. 快速迭代

 

為了達到這種開發模式,一些軟體開發實踐方法與工具也相繼被提出來,其中 CI/CD 被認為是敏捷開發的最重要實踐之一。


持續整合 (CI,Continuous Integration)

在開發過程中,為了快速適應需求變化,常常在很短的週期 (Scrum 大約兩週) 就會發佈一個新版本,在每個產出的新版本中要能驗證是正確且可執行的,為了達到此一目的,我們希望能在每次的原始碼提交後,能夠自動進行系統的建置與測試,並第一時間得到驗證的結果,這個自動化的過程就稱為持續整合 (Continuous Integration),其主要目標是更快發現和解決錯誤、改善軟體品質,還有減少驗證和發行新軟體更新所需的時間。

 

持續整合的自動化驗證過程可分為以下四個步驟:

驗證完成後,進一步可以整合自動化發佈或部署 (Continuous Delivery / Continuous Deployment) 。例如將驗證通過的系統發行至測試環境,讓使用者驗收測試,以達到更高的品質保證。

 

透過此些流程可以確保軟體品質,不會因為一個錯誤變動而產生錯誤結果或崩潰。同時在驗證過程中,也會產生一些回饋 (報表) 給開發者或其他角色,用來追蹤並改善軟體潛藏的問題。

 

本文針對在實踐 CI/CD 的過程中,所運用的流程與工具進行經驗分享。

 

CI/CD 流程

▲ CI/CD 流程示意圖

工具介紹

Jenkins

談到 CI,最廣為人知且老牌的工具是 Jenkins。Jenkins 是由 Java 撰寫的開源持續整合工具,可以幫助使用者達成專案建置、測試及部署等階段自動化的目標,是實現測試自動化及持續整合的利器。Jenkins 的功能完整,也提供了上千個外掛 (Plugins) 來對應各種開發語言與工具,是一套可以自訂運用的系統。但也因為其功能強大、客製程度高,上手需要一些時間。然而一旦流程被定義,並整合好相關環境,它可以發揮持續性整合威力,大幅增加開發生產力。總體來說,透過 Jenkins 打理開發流程中的大小事,透過自動化串接起每個階段工作,讓開發人員能專注在最有價值的工作上。

GitLab

對 CI/CD 而言,一個好的 Source Control Management 系統也是絕對必要的。版控工具一定是使用 git,至於用哪一套管理系統可以選擇則很多了,知名的有 GitHub、BitBucket、GitLab、TFS 等等,我們則選擇自行安裝 GitLab 管理。GitLab 是一個用於 Git 倉庫管理系統的開源專案,使用 Git 作為程式碼管理工具,並在此基礎上搭建起來的 web 服務,提供團隊完整的開發流程支援,除了基本的版控、Wiki、問題追蹤等常用功能外,近期也整合了 CI/CD 功能,不過我們還是專注在版控的功能,CI 還是交由 Jenkins 控制。

SonarQube

在系統軟體開發中,本團隊將採用 OWASP 組織推出的 SonarQube 原始碼檢測系統,SonarQube 起源於 2007 年並專注於提供程式碼品質、風險檢測解決方案,目前支援超過 25 種以上程式語言的開發分析,如 Java,C#,JavaScript,C/C++,TypeScript 以及金融行業的 COBOL 語言等,並能針對 C WE/SANS Top 25 及 OWASP Top 10 等弱點項目加以檢出及產品檢測報告。

 

開發人員可透過 SonarQube 分析專案中有潛在危險之程式碼片段,並產生測試報告 (PDF 檔案) 供系統開發人員進行修正與程式優化,它提供了高度安全性(Vulnerabilities、SQL injection),可靠度(Bugs) 以及可維護性 (Code Smells )。SonarQube 也提供了 IDE 插件 SonarLint,在編寫程式代碼時可即時顯示問題,因此可以儘早修復它們。

 

SonarQube 在品質檢測方面主要涉及七個維度:程式碼架構與設計、重複度、單元測試覆蓋率、複雜度、潛在 bug、程式碼撰寫風格及標準、程式碼註釋。我們可以建立適合的品質規則組合 (Quality Profile),在 CI 過程中同時檢測,可大幅縮減人工 Code Review 的時間,並讓程式碼的產出有一致性,是好維護以及高品質的。

Slack

Slack 是一套團隊溝通工具,團隊能依照工作內容、專案或任何主題開設頻道,在頻道內能訊息與檔案交流、螢幕共享、進行視訊、釘選重要訊息,提升溝通效率在 CI 。Slack 可以與多數服務進行串接,在 CI 流程中,將原始碼提交、專案建置、測試結果、源碼檢測、部署結果等資訊發布於頻道上,相較於其他的通訊軟體,更能讓團隊專注於專案訊息交流與溝通上

持續精進

結語

持續整合,就是持續改善,每個自動化的環節,都可以進一步優化,透過 CI/CD 的導入,讓團隊理解不足之處,提早發現軟體的缺失並進行改善,持續整合的其中一個重點是自動化,將重覆的動作利用程式的方式自動進行,可減少人為的錯誤,也讓開發人員可以專心於開發上,透過自動化建置、測試、程式碼檢測等讓軟體的產出更有品質與保障。

 

持續整合的導入不是一蹴可幾的,就算是只有自動建置而沒有測試,也能開始架設 CI Server,讓專案動起來,感受一下 CI 帶來的好處,之後再將其他流程與工具慢慢加入,這也是敏捷開發的實踐。

 

#WeMakeItAmazing #持續整合 #CI/CD #DevOps