Convalida configurazioni

Questo tutorial mostra come convalidare le configurazioni con Cloud Build quando utilizzi i cluster Google Kubernetes Engine. 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 nomos vet comando.

Obiettivi

  • Crea un file di configurazione di Cloud Build che indichi a Config Sync di utilizzare nomos vet sulle configurazioni nel 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 vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.

I nuovi Google Cloud utenti potrebbero avere diritto a una prova senza costi.

Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.

Prima di iniziare

  1. Accedi al tuo Google Cloud account. 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 senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  8. Crea o accedi a un cluster GKE che soddisfi i requisiti per Config Sync. Per informazioni dettagliate su come creare un cluster di questo tipo, consulta la Guida introduttiva a Config Sync.

Concedi l'autorizzazione all'account di servizio Cloud Build

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

gcloud

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

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 Google Cloud console.

    Vai alla pagina IAM

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

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. In quella 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 principale 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 al cluster GKE my-cluster. L'utente root genera questo file con autorizzazioni limitate.
  2. Esegui chmod 444 /kube/config per rendere questo file leggibile nel passaggio successivo.
  3. Esegui nomos vet sul repository Git clonato automaticamente in /workspace. Se utilizzi 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 al ramo master di un repository Cloud Source Repositories.

  1. Apri la pagina Trigger nella Google Cloud console.

    Vai alla pagina dei trigger

  2. Fai clic su Connetti repository.

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

  4. Seleziona il 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 su un branch
    Branch ^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 il trigger:

  1. Apri la pagina Trigger nella Google Cloud console.

    Vai alla pagina dei trigger

  2. Individua il trigger che hai creato, quindi fai clic su Esegui trigger.

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

  3. Fai clic su Mostra.

    I passaggi di Cloud Build vengono visualizzati in verde se la configurazione è corretta.

Configurazioni di Cloud Build non valide

Un trigger non può essere eseguito se il file di configurazione di Cloud Build non è valido.

Per testare questa funzionalità, aggiorna la configurazione di Cloud Build nel repository con il seguente file. Nota il rientro non valido alla 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 manualmente il trigger, riceverai il seguente messaggio di errore perché path: alla 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, rientra path: alla riga 6 allo stesso livello di name: alla riga 5. Per saperne di più sulla struttura di un file di configurazione di Cloud Build, consulta Creare una configurazione di base di Cloud Build.

Libera spazio

Elimina il progetto

    Elimina un Google Cloud progetto:

    gcloud projects delete PROJECT_ID

Elimina singole risorse

Per eliminare le singole risorse, completa i passaggi seguenti:

  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