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 平台提供預先建構的外掛程式,包括 GitHub 和 fastlane。詳情請參閱側邊導覽。
- 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 通知我們。