﻿# 使用 Mend Bolt 分析專案使用的開源套件安全性與授權合規性

今天在公司的 [Azure DevOps Services](https://azure.microsoft.com/en-us/products/devops?WT.mc_id=DT-MVP-4015686) 組織加入了一個 [Mend Bolt](https://marketplace.visualstudio.com/items?itemName=whitesource.whiteSource-bolt-v2) 擴充套件，這套免費工具可以掃描原始碼中所使用到的開放原始碼套件，告訴你哪些套件的版本有弱點、該升級到什麼版本、還會跟你說哪些套件的授權有風險，這些功能提供的資訊對提升軟體專案的安全性很有幫助，這篇文章我就來介紹這個工具。

![Mend Bolt (formerly WhiteSource)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/ab5bc686823c8bdc4f05-1773e501-ef72-4c14-86ad-60f2a37295d0.webp)

> 其實 [Mend Bolt](https://marketplace.visualstudio.com/items?itemName=whitesource.whiteSource-bolt-v2) 的前身是 [WhiteSource Bolt](https://marketplace.visualstudio.com/items?itemName=whitesource.ws-bolt)，可以算是 WhiteSource Bolt v2 的新版本，如果你曾經安裝過 WhiteSource Bolt 的人應該知道他有個每日只能掃描 5 次的免費額度上限，但 Mend Bolt 並沒有這個限制！👍

### 簡介 Mend Bolt 擴充套件

Mend Bolt 是一套免費的擴充套件，支援 GitHub 與 Azure Pipelines 兩大 CI/CD 平台，可以掃描您的所有專案，檢測開放原始碼元件與其授權(License)和已知漏洞。

這套工具的支援度涵蓋大多數常見的程式語言，並持續追踪多個開放原始碼漏洞資料庫，如 NVD、安全公告(security advisories)、同行評審的漏洞資料庫(peer-reviewed vulnerability databases)以及知名的開放原始碼專案議題追蹤。它會即時警告你有關易受攻擊且過時的開放原始碼元件，並提供全面的最新版本清單、授權和安全報告。

![Open Source Risk Report](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5da66bc0c096d834d8e7-ba31715f-6e4f-4a7e-bcd1-46a38c61aeb3.webp)

他還會幫你檢測這些第三方相依套件的授權合規性(license compliance)，並根據開放原始碼盡職調查報告(due diligence reports)的要求，提供其授權的參考連結。除了全面詳細的報告，包括所有相依套件的授權外，它還提供了按建置分佈的開放原始碼授權摘要。

![License risks](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/2efe6c9636003c87a678-9ee6e074-f60d-43e6-aef9-e0dcd1263030.webp)

### 安裝 Mend Bolt 擴充套件

安裝之前有幾個要件必須符合：

1.  你的 Azure DevOps 組織必須連接 Azure Active Directory (Azure AD)
2.  如果你要跑在 Self-hosted build agent 的話，他不支援跑在 Proxy 模式下
3.  在 Build agent 上面必須先裝好套件管理器(Package Manager)

安裝的過程就跟安裝其他 Azure DevOps 擴充套件一樣：

1.  開啟 [Mend Bolt](https://marketplace.visualstudio.com/items?itemName=whitesource.whiteSource-bolt-v2) 擴充套件網頁
2.  按下 **Get it free** 按鈕，並照著畫面指引安裝完成即可

### 啟用 Mend Bolt 擴充套件

由於使用 Mend Bolt 之前，必須先經過一個啟用的流程，留下你的基本資料才能開始使用。

1.  進入 Azure DevOps 的組織設定(Organization Settings)
2.  從左側選單捲到最下方，可以看到一個 Extensions 分類，底下有個 Mend 項目，點擊開啟網頁
3.  開啟網頁後，只要輸入一些基本聯絡方式，按下 **Create Account** 按鈕後就可以開始使用 Mend Bolt 了！

### 新增 Mend Bolt task 到傳統編輯器(Classic Editor)

使用 Azure Pipelines 內建的 Classic Editor 來編輯 Pipelines 的話，可以參考以下步驟：

1.  在 Agent job 點擊 ＋ 號，搜尋 `Mend` 關鍵字，找到 `Mend Bolt (formerly WhiteSource)` 項目，按下 **Add** 加入
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7755ee2d7c043568d217-ad2511ed-c61a-4ab1-8fd8-720b0194303b.webp)
    
    > 注意: 你在搜尋 `Mend` 的時候，應該會看到另一個 [Mend for Azure DevOps (formerly WhiteSource)](https://marketplace.visualstudio.com/items?itemName=whitesource.WhiteSource-azure-devops-services) 擴充套件，這個是專門提供給「付費版」的 Mend 用戶使用的，支援 Azure DevOps Server 安裝！
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/06800b4093d6912fdfa6-f6f8ce37-15d2-46e2-bcdd-219a7e97d98c.webp)
    
2.  設定 Mend Bolt 參數
    
    基本上，需要設定的地方大概只有三個：
    
    1.  `Root working directory` 請指向你的原始碼根目錄，在 Azure Pipelines 預設就是 `$(System.DefaultWorkingDirectory)` 預先定義變數。
    2.  `Project name` 請設定一組唯一的專案名稱，隨便設定什麼都可以，我是設定成 Pipelines 的名稱，而不設定也是可以的。
    3.  `Scan report timeout (minutes)` 則設定掃描報告的逾期時間，預設值 10 分鐘應該夠久了，除非你的專案真的很大才需要調整。
    
    ![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/250d5e20d142bf463404-e9e14b31-3a68-41b8-bafa-b95495bd287c.webp)
    

### 新增 Mend Bolt task 到 YAML 定義檔

你若使用 YAML 來定義 Pipelines 的話，可以使用以下 Task 定義：

```yaml
- task: mend@21
  inputs:
    cwd: '$(System.DefaultWorkingDirectory)'
```

### 查看 Mend Bolt 報告

我們每次 **Run pipeline** 之後，會得到一個 **Run** 的結果，在結果頁面中會出現一個 `Mend Bolt` 頁籤，點擊進去就可以看掃描報告！

![Open Source Risk Report](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/f0d68be1b2a46ce08db2-fae57071-2428-411a-9535-dce3e59ee10b.webp)

注意: 每次執行 `Mend Bolt` task 都會把報告結果上傳到 Mend 的伺服器，所以看報告的時候其實需要連到外網！

![image](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/dfc5e36e4555492e5951-f68eda69-32a4-4cea-8054-a095796417b0.webp)

### 注意事項

1.  每個 Azure Pipelines 中的 Build Definition 只能有一個 `WhiteSource (Mend Bolt)` 的 task，不能設定多個，否則他只會顯示其中一份報告而已。
2.  執行 `Mend Bolt` task 的時候，若遇到 `package.json` 會進行 `npm install` 安裝動作，建議可以把 `Mend Bolt` task 移到 `npm install` 這個 task 之後執行，這樣執行速度會比較快。

### 相關連結

-   [Mend Bolt: Find & Fix Open Source vulnerabilities](https://www.mend.io/free-developer-tools/bolt/)
-   [Mend Bolt for Azure Pipelines](https://docs.mend.io/bundle/community_tools/page/mend_bolt_for_azure_pipelines.html)
-   [Mend Bolt (formerly WhiteSource) - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=whitesource.whiteSource-bolt-v2)
