Azure DevOps 服務
狀態檢查透過阻擋合併,直到測試通過、安全掃描清除或其他條件,來強制執行品質標準。 Azure DevOps 服務與外部工具會使用 PR 狀態 API 進行狀態檢查。
若要要求分支政策進行狀態檢查,請在「狀態檢查」區建立政策,並以格式 .genre/name 拉取請求接著會阻擋合併,直到檢查回報 succeeded。
狀態值與合併行為
當狀態檢查將結果發布給拉取請求時,會回報以下其中一個值:
| 價值 | 符合必要政策的行為 | 可選政策的行為 |
|---|---|---|
succeeded |
✓ 解除政策封鎖 | 資訊性 |
failed |
✗ 區塊合併 | 資訊性 |
error |
✗ 區塊合併 | 資訊性 |
pending |
⏳ 區塊合併(等待結果) | 資訊性 |
notApplicable |
✓ 繞過保單要求 | 資訊性 |
notSet |
⏳ 待處理 | 資訊性 |
Note
當某個必要政策預設為 套用時,你可以發文 notApplicable 移除特定 PR 的政策要求,而不必更改政策設定。 當檢查不適用於特定變更時,這很有用。
關於新增狀態檢查政策的一般說明,請參見 「為外部服務配置分支政策」。 關於進階政策選項,包括授權身份限制與政策適用性設定,請參閱 「自訂與擴展拉取請求工作流程與拉取請求狀態」。
First-party Azure DevOps status checks
以下是 Azure DevOps Services 原生發布的唯一狀態檢查。 每次檢查都使用固定 的類型 值,因此你可以在服務發布第一個狀態前後設定分支政策。 其他所有狀態檢查皆由外部服務透過 PR 狀態 API 進行。
適用於 Azure DevOps 的 GitHub Advanced Security
這些狀態檢查需要在倉庫啟用 GitHub Advanced Security for Azure DevOps。 這些檢查評估在程式碼掃描(CodeQL)、相依性掃描及秘密掃描中偵測到的安全漏洞。
| 類型 | Name | 狀態需檢查 | Description |
|---|---|---|---|
AdvancedSecurity |
AllHighAndCritical |
AdvancedSecurity/AllHighAndCritical |
當儲存庫中存在任何未解決的嚴重或高嚴重性漏洞,來自任何掃描類型(程式碼、相依或秘密)時,區塊會合併。 需要一個建置驗證政策並啟用 Advanced Security pipeline 任務。 |
AdvancedSecurity |
NewHighAndCritical |
AdvancedSecurity/NewHighAndCritical |
當拉取請求引入任何掃描類型的新嚴重或高嚴重性漏洞時,區塊會合併。 現有的儲存庫漏洞並不會阻擋合併。 需要一個帶有先進安全管線任務的建置驗證政策來掃描 PR 分支。 |
Note
這兩種 AdvancedSecurity 狀態檢查都需要建置驗證政策,並設定 Wait for Processing: true 進階安全掃描任務,以確保狀態反映最新的掃描結果。 對於相依掃描或程式碼掃描(CodeQL),請啟用 Wait for Processing 該 AdvancedSecurity-Publish 任務。 對於程式碼掃描,也請在任務中 AdvancedSecurity-CodeQL-Analyze 啟用它。 兩次檢查都會出現在首次成功使用先進安全掃描的管線運行後的狀態 檢查 下拉選單中。
Tip
如果你的倉庫有未解決的警報,請先避免 AdvancedSecurity/NewHighAndCritical 立即封鎖所有拉取請求。 等警報積壓解決後再遷移到 AdvancedSecurity/AllHighAndCritical 。
關於設定說明,請參見 「設定拉取請求狀態檢查」。
Important
設定狀態檢查政策時,請將 進階選項 維持預設狀態。 更改授權身份或要求迭代 ID 會阻止狀態檢查正確發布。
Azure Pipelines code coverage
當管線發布拉取請求的程式碼覆蓋結果時,Azure Pipelines 會自動發布程式碼覆蓋狀態檢查。 類型就是管線名稱,所以具體 genre/name 數值取決於你怎麼命名管線。
| 類型 | Name | 狀態需檢查 | Description |
|---|---|---|---|
{pipeline-name} |
codecoverage |
{pipeline-name}/codecoverage |
報告拉取請求中變更線路的不同覆蓋百分比。 預設為諮詢;除非設定為具有最低保障門檻的強制分支保單,否則不會阻擋合併。 |
預設通過門檻是70% 不同覆蓋範圍。 要調整閾值及其他設定,請將檔案 azurepipelines-coverage.yml 加入到你的儲存庫根目錄:
coverage:
status:
comments: on
diff:
target: 80
換 80 成你想要的最低差速保障百分比。
關於設定說明,請參閱 「使用代碼覆蓋政策強制執行分支保護」。
Tip
這個類型是從你管線在 Azure Pipelines 中的顯示名稱衍生出來的;它不是一個可以單獨設定的值。 例如,一個名為 CI - Main 的管線以 CI - Main/codecoverageStatus 作為檢查 值。 狀態檢查只會在服務至少在拉取請求中發布一個狀態後才會出現在下拉選單中。 對於尚未執行的新整合,請直接在欄位輸入該 genre/name 值。
自訂與外部狀態檢查
任何使用 PR 狀態 API 的服務都可以對你的拉取請求發布狀態檢查。 若要透過 REST API 發布狀態檢查,呼叫身份需要在倉庫上取得 Contribute to pull request 權限。
當服務發布狀態時,該狀態會出現 genre/name 在新增政策時的「 狀態勾選 」下拉選單。 對於尚未上架的新服務,請直接輸入 genre/name 該數值。
常見的整合模式
| 整合類型 | Description | Examples |
|---|---|---|
| 建置與測試伺服器 | 外部配置群工具會在對 PR 分支執行測試後,公布通過或失敗結果。 | Jenkins、GitLab CI、CircleCI、Travis CI |
| 程式碼品質分析 | 靜態分析工具,能掃描程式碼以找出錯誤、漏洞和程式碼異常。 | SonarQube,SonarCloud |
| 安全掃描器 | 非 Microsoft 的漏洞掃描器,會在掃描 PR 變更後發布結果。 也支援 SARIF 格式的結果。 | Snyk, Checkmarx, WhiteSource (Mend), Microsoft 安全性 DevOps |
| 合規與政策 | 政策執行工具,用以驗證授權、規範標準、法規要求或部署準備度。 | 自訂合規檢查器、部署閘門、授權掃描器 |
| GitHub Actions | 當倉庫連接 GitHub 時,GitHub Actions 工作流程的檢查會出現在 Azure DevOps PR 中。 有關配置細節,請參考Azure DevOps GitHub整合。 | 任何 GitHub Actions 工作流程都可以發布狀態 |
| 批准與大門 | 需要手動或自動核准才能合併的服務。 | ServiceNow,透過 REST API 提供自訂審核服務 |
政策設定選項
新增狀態檢查政策時,您可以設定:
- 政策要求:依需求設定政策(封鎖、合併,除非檢查通過)或可選(僅提供資訊)。
- 授權身份:限制哪些帳號可以發布符合政策的狀態值。 留空以允許任何帳號。
- 重置條件:指定在推送新提交時狀態是否會重置。 預設情況下,推送新提交會將所需的狀態檢查重置為待處理,迫使他們評估你最新的程式碼。 為了讓狀態在提交間持續存在,請在 有新變更時關閉重置狀態。
-
政策適用性:選擇政策是立即生效(預設適用)或僅在首次狀態發布後生效(條件型)。
-
預設套用:政策會阻擋合併,直到
succeeded狀態發布。 你可以發帖notApplicable來繞過特定永久居民的要求。 - 條件:保單只有在檢查站發出第一個狀態後才會生效。
-
預設套用:政策會阻擋合併,直到
- 路徑過濾器:將政策限制為修改特定路徑檔案的 PR(可選)。
要實作自訂狀態檢查,請參見: