Convalida configurazioni

Questo tutorial mostra come convalidare le configurazioni con Cloud Build quando utilizzi i cluster della versione Google Kubernetes Engine (GKE) Enterprise. La stessa configurazione funziona in qualsiasi altro sistema CI/CD basato su container, come CircleCI, con modifiche minime.

Ti consigliamo di convalidare eventuali modifiche alla configurazione nella pipeline CI/CD oltre a verificare la validità delle configurazioni eseguendo il comando nomos vet.

Obiettivi

  • Crea un file di configurazione di Cloud Build che indichi a Config Sync di utilizzare nomos vet nelle configurazioni nel tuo repository.
  • Crea un trigger di Cloud Build in modo che le configurazioni vengano controllate ogni volta che viene apportata una modifica al ramo di sviluppo.

Costi

In questo documento, utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Attiva l'API Cloud Build.

    Abilita l'API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Attiva l'API Cloud Build.

    Abilita l'API

  8. Creare o avere accesso a un cluster GKE Enterprise che soddisfi i requisiti per Config Sync. Per maggiori dettagli su come creare un cluster di questo tipo, consulta Inizia a utilizzare Config Sync.

Concedi l'autorizzazione all'account di servizio Cloud Build

Concedi all'account di servizio Cloud Build l'autorizzazione per accedere al cluster GKE Enterprise.

gcloud

Per aggiungere il ruolo Kubernetes Engine Developer all'account di servizio Cloud Build, esegui questo comando:

PROJECT_ID=$(gcloud config get-value project)
PROJECT_NUM=$(gcloud projects list --filter="$PROJECT_ID" --format="value(PROJECT_NUMBER)")
gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member=serviceAccount:$PROJECT_NUM@cloudbuild.gserviceaccount.com \
    --role=roles/container.developer

Console

  1. Apri la pagina IAM nella console Google Cloud.

    Vai alla pagina IAM

  2. Nella colonna member, individua la riga con l'account di servizio Cloud Build:

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. Nella riga, fai clic su Modifica entità.

  4. Fai clic su Aggiungi un altro ruolo.

  5. Nell'elenco Seleziona un ruolo, seleziona Kubernetes Engine Developer e fai clic su Salva.

Crea una configurazione di Cloud Build

Crea un file di configurazione di Cloud Build e archivialo nella directory radice del repository contenente i file di configurazione (ad esempio, my-repo/cloudbuild.yaml).

steps:
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['config', 'current-context']
  volumes:
  - name: 'kube'
    path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  - 'CLOUDSDK_COMPUTE_ZONE=ZONE'
  - 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
  - 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
- name: 'bash'
  args: ['chmod', '444', '/kube/config']
  volumes:
  - name: 'kube'
    path: '/kube'
- name: 'gcr.io/config-management-release/nomos:stable'
  args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
  volumes:
  - name: 'kube'
    path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  timeout: 30s

Sostituisci quanto segue:

  • ZONE: la zona in cui è in esecuzione il cluster
  • CLUSTER_NAME: il nome del cluster
  • POLICY_DIR: il percorso all'interno del repository Git che rappresenta il livello superiore del repository da sincronizzare

Questa configurazione prevede tre passaggi:

  1. Esegui kubectl config current-context per generare il file kubeconfig necessario per l'autenticazione nel cluster GKE my-cluster. L'utente root genera questo file con autorizzazioni limitate.
  2. Esegui chmod 444 /kube/config per rendere il file leggibile nel passaggio successivo.
  3. Esegui nomos vet nel repository Git che viene clonato automaticamente in /workspace. Se stai utilizzando un repository non strutturato, esegui invece nomos vet --source-format=unstructured.

Crea un trigger di build

L'esempio seguente crea un trigger che viene eseguito per ogni commit nel ramo master di un repository Cloud Source Repositories.

  1. Apri la pagina Trigger nella console Google Cloud.

    Vai alla pagina degli attivatori

  2. Fai clic su Connetti repository.

  3. Seleziona GitHub (con mirroring) e fai clic su Continua.

  4. Seleziona il tuo repository, quindi fai clic su Connetti repository.

  5. Fai clic su Aggiungi trigger.

  6. Inserisci o seleziona la voce corrispondente in ogni campo descritto nella tabella seguente:

    Campo Voce
    Evento Push al ramo
    Ramo ^master$
    Configurazione File di configurazione di Cloud Build (yaml o json)
    Posizione file di configurazione Cloud Build / cloudbuild.yaml
  7. Fai clic su Crea per salvare il trigger di build.

Testa il trigger di build

Testa manualmente la configurazione eseguendo l'attivatore:

  1. Apri la pagina Trigger nella console Google Cloud.

    Vai alla pagina degli attivatori

  2. Trova il trigger che hai creato e fai clic su Esegui trigger.

    Viene visualizzato il messaggio "Build iniziata sul ramo master".

  3. Fai clic su Mostra.

    Se configurato correttamente, i passaggi di Cloud Build appaiono di colore verde.

Configurazioni di Cloud Build non valide

Impossibile eseguire un trigger se il file di configurazione di Cloud Build non è valido.

Per verificarlo, aggiorna la configurazione di Cloud Build nel tuo repository con il seguente file. Nota il rientro non valido nella riga 6:

steps:
- name: 'gcr.io/cloud-builders/kubectl'
  args: ['config', 'current-context']
  volumes:
  - name: 'kube'
  path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  - 'CLOUDSDK_COMPUTE_ZONE=ZONE'
  - 'CLOUDSDK_CONTAINER_CLUSTER=CLUSTER_NAME'
  - 'CLOUDSDK_CONTAINER_USE_APPLICATION_DEFAULT_CREDENTIALS=true'
- name: 'bash'
  args: ['chmod', '444', '/kube/config']
  volumes:
  - name: 'kube'
    path: '/kube'
- name: 'gcr.io/nomos-release/nomos:stable'
  args: ['nomos', 'vet', '--path', '/workspace/POLICY_DIR']
  volumes:
  - name: 'kube'
    path: '/kube'
  env:
  - 'KUBECONFIG=/kube/config'
  timeout: 30s

Se esegui di nuovo il trigger manualmente, ricevi il seguente messaggio di errore perché path: nella riga 6 non è rientrato correttamente:

Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.

Per correggere questa configurazione, fai rientrare path: nella riga 6 allo stesso livello di name: nella riga 5. Per ulteriori informazioni sulla struttura di un file di configurazione di Cloud Build, consulta Creazione di una configurazione di base di Cloud Build.

Esegui la pulizia

Elimina il progetto

    Elimina un progetto Google Cloud:

    gcloud projects delete PROJECT_ID

Elimina singole risorse

Per eliminare le singole risorse:

  1. Elimina il file di configurazione di Cloud Build.
  2. Elimina il trigger di Cloud Build che hai creato.
  3. Elimina il cluster che hai utilizzato per questo tutorial.

Passaggi successivi