Controlla la configurazione CI/CD

Prerequisiti per CI/CD

Per configurare l'esecuzione dei controlli in una pipeline, recupera gli input di configurazione chiave dal tuo account Checks e dal progetto Google Cloud.

Controlla l'account e l'app di destinazione

Quando esegui i controlli nella tua piattaforma CI/CD, devi assegnare i risultati a un account Controlli e a un'app che hai collegato a quell'account Controlli. Per farlo, avrai bisogno dell'ID account e dell'ID app di Checks.

Per il tuo ID account, visita la pagina Impostazioni account.

Per il tuo ID app, visita la pagina Impostazioni app.

Autenticazione

Un service account deve essere utilizzato quando si utilizzano i controlli in una configurazione di automazione, come CI/CD. Per ulteriori informazioni su come creare e configurare un service account, vedi Autenticare la CLI.

Se utilizzi uno dei plug-in CI/CD di Checks, consulta la documentazione del plug-in per scoprire come fornire le credenziali.

Se utilizzi la CLI Checks all'interno del sistema CI/CD, ti consigliamo di utilizzare le variabili di ambiente CI per configurare la chiave JSON. Ad esempio:

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

Configura i controlli da eseguire in una pipeline CI/CD

I controlli supportano i seguenti approcci:

Configurazione universale utilizzando l'interfaccia a riga di comando di Checks

Se non esiste un plug-in Controlli per la tua piattaforma CI/CD, puoi utilizzare la CLI Controlli. La CLI Checks può essere scritta direttamente dagli sviluppatori in qualsiasi piattaforma CI/CD che supporti i passaggi del workflow di esecuzione degli script.

La CLI Checks può essere utilizzata per:

  • Restituisci codici di errore diversi da zero solo quando vengono soddisfatti determinati criteri, ad esempio, esci con un codice di errore solo se vengono rilevati problemi di alta priorità. Tieni presente che l'interfaccia a riga di comando non restituirà mai un codice di errore; lo sviluppatore deve restituire i codici di errore manualmente nel passaggio di scripting.
  • Output di tutti i dati in formato JSON per una maggiore flessibilità.

Ecco un esempio di utilizzo della CLI in GitHub Actions a ogni commit, anziché dell'azione GitHub CI/CD Checks. Stiamo anche trasformando l'output per produrre un codice di errore quando i controlli rilevano problemi di priorità:

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);
                }

Feedback

Hai un flusso di lavoro CI/CD che vorresti vedere aggiunto a questa guida? Comunicacelo all'indirizzo checks-support@google.com.