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 平台(包括 GitHub 和 fastlane)提供预构建的插件。如需了解详情,请参阅侧边导航栏。
- 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 告知我们。