在 ADO Pipeline 中使用 SonarCloud 進行自動化源碼掃描

圖片
程式碼品質,絕對是每個專業開發團隊都會遇到的課題。

你知道的,當系統上線後,突然收到資安通報說發現了安全性漏洞,需要緊急修補。更糟的是,這個漏洞在開發階段就可以避免,只是當時沒人發現。然後你開始翻 Commit 紀錄,發現那段有問題的程式碼正是自己幾個月前寫的…這種情境難免會讓你冷汗直流。

這是為什麼我們需要在 SAST(Static Application Security Testing,靜態應用程式安全測試)與源碼掃描的原因。它就像是你的程式碼守門員,在你還沒意識到問題之前,先幫你把那些潛在的地雷給挖出來。

SAST 與 SonarCloud 的關係

靜態程式碼分析,也就是我們常說的原碼掃描,它不是去執行你的程式,而是透過搜尋常見的程式碼撰寫樣式,嗅出程式碼中可能的安全漏洞、程式碼壞味道(code smell)、技術債、還有那些可能會在半夜讓你接到客戶電話的潛在bug。

SonarCloud 則是 SonarSource 提供的原碼掃描雲端服務版,它基於知名的 SonarQube,但你不用自己架設伺服器、不用煩惱維護更新,申請完直接使用就行了。

對於使用 Azure DevOps 的團隊來說,兩者更是天作之合,因為官方有提供極其簡單好用的 Tasks 支援,整合起來超級輕鬆,幾個步驟就搞定。

而且,SonarCloud 支援超過 25 種程式語言,從 C#、Java、JavaScript 到 Python,基本上你想得到的它都有。它不只找出你的程式碼潛在問題,還會告訴你為什麼這段程式碼會是個問題、以及該怎麼修復,甚至連預估要花多少時間修復都幫你算好了。

我在 2020 年寫過一篇關於在 Azure DevOps Build Pipeline 中整合 SonarCube 的文章。但你也知道,科技業的時間流速跟外面不太一樣,四年過去了,很多東西都變了。

所以,是時候來個 2026 年的更新版了。

開始動手 : SonarCloud 帳號申請與設定

好,廢話不多說,我們直接開始。

首先,你需要一個 SonarCloud 雲端帳號。如果你有 Azure DevOps 帳號,就可以直接用它以 SSO 方式登入 SonarCloud,不用再另外註冊帳號。

你可以前往 https://SonarCloud.io/,選擇用 Azure DevOps 帳號登入。整個流程非常順暢,基本上就是點幾下同意授權,然後就進去了。

圖片

如果是第一次使用,登入後,可能會有點空虛,但沒問題,等等我們就會把專案加進來掃描。

這裡有個重點,SonarCloud 對於公開的開源專案是完全免費的。如果你的專案是 private 的,那就要考慮付費方案了。不過對於個人學習或開源貢獻來說,免費版已經非常夠用。

安裝 SonarCloud 擴充套件

接下來,我們要在 Azure DevOps 中安裝 SonarCloud 的擴充套見。

到 Azure DevOps Marketplace,搜尋 “SonarQube Cloud”,或是直接點這個連結:https://marketplace.visualstudio.com/items?itemName=SonarSource.SonarCloud

圖片

點下「Get it free」按鈕,選擇你要安裝的 Azure DevOps 組織,然後確認安裝。整個過程大概就是喝口咖啡的時間。

安裝完成後,你會在 Pipeline 的 Task 清單中看到 SonarCloud 相關的Tasks。這表示你已經成功跨出第一步了。

設定 SonarCloud 服務連接

這一步很關鍵。我們要讓 Azure DevOps 能夠跟 SonarCloud 溝通,這需要建立一個服務連接(Service Connection)。

在 SonarCloud 建立 Token

首先,回到 SonarCloud,進入你的帳號設定(Account Settings)。點選你右上角的頭像圖示,然後選擇「My Account」,接著,在「Security」頁籤下,你會看到「Tokens」的區塊。

圖片

給個名字,然後點擊「Generate Token」即可。一般來說,我們會給這個 Token取個有意義的名字,像是「Azure-DevOps-Pipeline」之類的。

記得要把產生的 token 立刻複製起來,因為它只會顯示這麼一次。如果你關掉視窗後才發現忘了複製,就只能重新產生一個了。

這個 Token 就像是你給 Azure DevOps 的通行證,讓它可以代表你跟 SonarCloud 溝通。所以千萬別把它放在公開的地方,也不要 commit 到版本控制裡。

在 Azure DevOps 設定服務連接

拿到 token 後,切換到 Azure DevOps,進入到Pipeline的設計畫面,添加一個Prepare Analysis Configuration task,然後進行Service connections的設定。

點擊「New service connection」,選擇「SonarCloud」類型。把剛剛複製的 Token 貼上去,給這個連接取個名字,然後儲存。

圖片

接著,我們需要在 SonarCloud 上建立對應的專案。

回到 SonarCloud 首頁,點擊右上角的「+」號,選擇「Analyze new project」。

圖片

接著不要點選 Import a new organization,而是直接選擇create a project manually。

圖片

這時候,SonarCloud 會讓你下拉選擇你的 Organizatio 並且填寫 Project Key。這兩個資訊非常重要,等一下在 ADO Pipeline 中會用到。設定好後,把這兩個值記下來,或是保持這個頁面開著。

在 ADO Task 中設定專案資訊

回到 Azure DevOps 的 Pipeline 編輯器,在「Prepare Analysis Configuration」這個 task 中,你需要填入剛剛從 SonarCloud 取得的資訊:

  • SonarCloud Service Endpoint - 選擇剛才建立的服務連接
  • Organization - 填入你的 Organization
  • Project Name - 一般來說我會建議你填寫你的 ADO 專案名稱。如此一來 Project Key 自動會是 Organization Name+Project Name。
  • Project Key - 唯一的專案識別值。

完成後,你應該會在服務連接列表中看到剛剛建立的 SonarCloud 連接。這表示 ADO 和 SonarCloud 兩邊已經可以溝通了。

在 Pipeline 中新增 SonarCloud 掃描任務

接著,請在 Build Pipeline 裡加入 SonarCloud 的掃描任務。

這邊需要特別注意一點:「Prepare Analysis Configuration」task 必須放在建置步驟之前,而「Run Code Analysis」則要放在建置步驟之後。這是因為 SonarCloud 需要在編譯過程中收集資料。

總的來說,你只少需要三個主要的 Task:

  1. Prepare Analysis Configuration - 準備分析環境(剛才設定的服務連接就在這裡用到)
  2. Build - 執行你的建置(這通常你已經有了)
  3. Run Code Analysis - 執行程式碼分析

來看一個實際的範例:

圖片

執行 Pipeline 並查看結果

設定完成後,儲存並執行你的 Pipeline。

如果一切順利,你會看到 Pipeline 成功執行。在執行的過程中,你可以看到 SonarCloud 的 Task 輸出詳細的分析資訊。

圖片

執行完畢後,最重要的就是倒數第二個連結,那是通往 SonarCloud 分析報告的入口。點進去,你會看到一個完整的程式碼品質儀表板。

在那裡,你會看到:

  • Bugs - 可能的程式錯誤
  • Vulnerabilities - 安全性漏洞
  • Code Smells - 程式碼壞味道
  • Coverage - 測試覆蓋率
  • Duplications - 重複的程式碼
  • Security Hotspots - 需要人工審查的安全性問題

每個問題都會標示嚴重程度,並且附上詳細的說明和修復建議。SonarCloud 甚至會給你的專案一個從 A 到 E 的評級,讓你一眼就能看出專案的整體品質。

更棒的是,它還有「Quality Gate」的概念。你可以設定品質標準,比如「新程式碼不能有 Critical 等級的 bug」、「測試覆蓋率要達到 80%」等等。如果不符合標準,Pipeline 就會失敗,強制你先修好問題才能繼續。

總結:為什麼你應該用 SonarCloud?

說實話,剛開始引入 SonarCloud 的時候,你的專案可能會被標示一大堆問題,看起來很嚇人。但這其實是好事,因為這些問題原本就存在,只是你不知道而已。

把 SonarCloud 整合到 CI/CD Pipeline 中,最大的好處就是:

  1. 持續改善 - 每次 commit 都會被檢查,問題不會累積
  2. 團隊共識 - 大家都能看到相同的品質指標,知道該往哪個方向努力
  3. 降低風險 - 在程式碼進入 production 之前就找出潛在問題
  4. 知識傳承 - 新手可以從 SonarCloud 的建議中學習最佳實踐

而且,一旦設定好,它就會默默地在背景工作,不需要額外的維護成本。就像有個免費的資深工程師在幫你做 code review,豈不是挺好?

程式碼品質不是一蹴可幾的,但有了 SonarCloud 這樣的工具,至少我們有了一個明確的方向和持續改進的機制。而在 Azure DevOps Pipeline 中整合它,就是把這個機制自動化,讓品質管控成為開發流程的一部分,而不是額外的負擔。

試試看吧,你會發現,原來制度化的寫出好的程式碼,並沒有想像中那麼難。

留言

這個網誌中的熱門文章

開啟 teams 中的『會議轉錄(謄寫)』與Copilot會議記錄、摘要功能

當 Dify 遇上 MCP:打造 AI Agent 從此不再燒腦

使用LM Studio輕鬆在本地端以API呼叫大語言模型(LLM)

原來使用 .net 寫個 MCP Server 如此簡單

敏捷導入的真相