檢查 CI/CD 設定

CI/CD 的必要條件

如要設定在管道中執行的檢查,請從 Checks 帳戶和 Google Cloud 專案中擷取重要設定輸入內容。

檢查目標帳戶和應用程式

在 CI/CD 平台中執行檢查時,您需要將結果指派給 Checks 帳戶,以及已連結至該 Checks 帳戶的應用程式。如要這麼做,您需要 Checks 帳戶 ID應用程式 ID

如要查看帳戶 ID,請前往「帳戶設定頁面」。

如要取得應用程式 ID,請前往應用程式設定頁面

驗證

在自動化設定 (例如 CI/CD) 中使用 Checks 時,應使用服務帳戶。如要進一步瞭解如何建立及設定服務帳戶,請參閱「驗證 CLI」。

如果使用 Checks CI/CD 外掛程式,請參閱外掛程式的說明文件,瞭解如何提供憑證。

如果在 CI/CD 系統中使用 Checks CLI,建議使用 CI 環境變數設定 JSON 金鑰。例如:

CHECKS_CREDENTIALS=/my/path/to/serviceaccount.json

設定在 CI/CD 管道中執行的檢查

檢查支援下列方法:

  • 檢查 CI/CD 外掛程式:Checks 為多個 CI/CD 平台提供預先建構的外掛程式,包括 GitHubfastlane。詳情請參閱側邊導覽。
  • Checks CLI:如果團隊的工作流程較為複雜,或使用的建構系統沒有 Checks 預先建構的外掛程式,可以在 CI/CD 管道中使用 Checks CLI。詳情請參閱「使用 Checks CLI 進行設定」和「使用 Checks CLI 進行通用設定」。
  • Checks API:對於工作流程高度客製化的團隊,Checks 提供強大的 REST API。您可以使用這項 API 啟動掃描、擷取報表,並根據自身需求量身打造體驗。詳情請參閱 Checks API 說明文件

使用 Checks CLI 進行通用設定

如果您的 CI/CD 平台沒有 Checks 外掛程式,可以使用 Checks CLI。開發人員可以直接將 Checks CLI 編寫成指令碼,並納入任何支援指令碼執行的 CI/CD 平台工作流程步驟。

Checks CLI 可編寫指令碼,用於執行下列操作:

  • 只有在符合特定條件時,才傳回非零錯誤代碼,例如僅在發現高優先順序問題時,才以錯誤代碼結束。請注意,CLI 絕不會傳回錯誤碼,開發人員必須在指令碼編寫步驟中手動傳回錯誤碼。
  • 將所有資料輸出為 JSON 格式,以利彈性運用。

以下範例說明如何在每次提交時,於 GitHub Actions 中使用 CLI,而非 Checks CI/CD GitHub Action。我們也會轉換輸出內容,在檢查發現優先順序問題時產生錯誤代碼:

name: Example workflow using Checks
run-name: ${ { github.actor } } is running Checks App Compliance GitHub Action
on: [push]
jobs:
  checks:
    runs-on: ubuntu-latest
    steps:
        uses: actions/checkout@v4
      - name: Checks App Compliance analysis
        run:
          echo 'Starting Checks App Compliance scan...'
          chmod +x ./checks
          ./checks report generate --binary-path=${CHECKS_BINARY_PATH} --app-id=${CHECKS_APP_ID} --account-id=${CHECKS_ACCOUNT_ID} --no-input --json  --wait-and-print-report > checks_results.json
          echo "Wrote App Compliance scan results to checks_results.json"
        env:
            # Replace all inputs with your configurations.
            CHECKS_CREDENTIALS: ${{ secrets.SERVICE_ACCOUNT_JSON }}
            CHECKS_APP_ID: "123456"
            CHECKS_ACCOUNT_ID: "654321"
            CHECKS_BINARY_PATH: "./app_release.apk"
      - name: Read JSON file
        uses: actions/github-script@v6
        with:
            script: |
                const fs = require('fs');
                const json = fs.readFileSync('./checks_results.json', 'utf8');
                const report = JSON.parse(json);

                console.log(`Generated report name: ${report.name}`);
                console.log(`Report console URL: ${report.resultsUri}`);

                const failingChecks = [];
                for (const check of report.checks) {
                    if (check.severity.toString() === 'PRIORITY' && check.state.toString() === 'FAILED') {
                        failingChecks.push(check);
                    }
                }

                if (failingChecks.length > 0) {
                    console.log(`${failingChecks.length} priority issue(s) detected: `);
                    for (const check of failingChecks) {
                        console.log(`Type: ${check.type}. Details: ${JSON.stringify(check)}`);
                    }
                    process.exit(1);
                }

意見回饋

您是否有希望新增至本指南的 CI/CD 工作流程?請來信至 checks-support@google.com 通知我們。