检查 CI/CD 设置

CI/CD 的前提条件

如需配置在流水线中运行的检查,请从您的 Checks 账号和 Google Cloud 项目中检索关键配置输入。

目标“检查”账号和应用

在 CI/CD 平台中运行检查时,您需要将结果分配给检查账号以及已与该检查账号相关联的应用。为此,您需要 Checks 账号 ID应用 ID

如需查看您的账号 ID,请访问您的账号设置页面

如需查看您的应用 ID,请访问应用设置页面

身份验证

在自动化设置(例如 CI/CD)中使用检查时,应使用服务账号。如需详细了解如何创建和配置服务账号,请参阅对 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 预构建插件的 build 系统的团队可以在其 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 告知我们。