检查 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 文档

Jenkins

此示例展示了 Checks CLI 的一种可能的 Jenkins 集成。

前提条件

  • 设置 CHECKS_CREDENTIALS 环境并将其指向服务账号凭据。
  • Pipeline Utility Steps 插件添加到您的 Jenkins 服务器,以添加对解释 JSON 字符串(例如 readJSON 函数)的支持。

示例

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building APK ...'
                sh 'build-apk-cmd'
            }
        }
        stage('Checks Analysis') {
            steps {
                script {
                    ACCOUNT_ID = "123456"
                    APP_ID = "654321"
                    BINARY_PATH = "${WORKSPACE}/path/to/binary.apk"

                    echo 'Starting Checks Analysis ...'

                    sh "./checks report generate --binary-path=${BINARY_PATH} --app-id=${APP_ID} --account-id=${ACCOUNT_ID} --no-input --json  --wait-and-print-report > checks_results.json"

                    echo "Wrote Checks analysis results to checks_results.json"

                    def report = readJSON file: "${WORKSPACE}/checks_results.json"

                    echo "Generated report name: ${report.name}"
                    echo "Report console URL: ${report.resultsUri}"

                    def failingChecks = []
                    for (check in report.checks) {
                        if (check.severity.toString() == "PRIORITY" && check.state.toString() == "FAILED") {
                            failingChecks.push(check)
                        }
                    }

                    if (failingChecks.size() > 0) {
                        echo "${failingChecks.size()} priority issue(s) detected: "
                        for (check in failingChecks) {
                            echo "Type: ${check.type}. Details: ${check}"
                        }
                        error('Failing build because Checks detected at least one priority issue.')
                    }
                }
            }
        }
    }
    post {
        failure {
            echo "Pipeline failed :("
        }
    }
}

反馈

您是否有希望添加到本指南中的 CI/CD 工作流?请发送电子邮件至 checks-support@google.com 告知我们。