在 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:
- Prepare Analysis Configuration - 準備分析環境(剛才設定的服務連接就在這裡用到)
- Build - 執行你的建置(這通常你已經有了)
- 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 中,最大的好處就是:
- 持續改善 - 每次 commit 都會被檢查,問題不會累積
- 團隊共識 - 大家都能看到相同的品質指標,知道該往哪個方向努力
- 降低風險 - 在程式碼進入 production 之前就找出潛在問題
- 知識傳承 - 新手可以從 SonarCloud 的建議中學習最佳實踐
而且,一旦設定好,它就會默默地在背景工作,不需要額外的維護成本。就像有個免費的資深工程師在幫你做 code review,豈不是挺好?
程式碼品質不是一蹴可幾的,但有了 SonarCloud 這樣的工具,至少我們有了一個明確的方向和持續改進的機制。而在 Azure DevOps Pipeline 中整合它,就是把這個機制自動化,讓品質管控成為開發流程的一部分,而不是額外的負擔。
試試看吧,你會發現,原來制度化的寫出好的程式碼,並沒有想像中那麼難。
留言