Questo tutorial mostra come convalidare le configurazioni con Cloud Build quando utilizzi i cluster 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 le 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 del repository. - Crea un trigger 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:
- Config Sync (part of GKE Enterprise)
- Cloud Build
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per ulteriori informazioni, vedi Pulizia.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build API.
- Crea o accedi a un cluster GKE Enterprise che soddisfi i requisiti per Config Sync. Per informazioni dettagliate su come creare un cluster di questo tipo, vedi Inizia a utilizzare Config Sync.
Apri la pagina IAM nella console Google Cloud .
Nella colonna membro, trova la riga con il service account Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
In quella riga, fai clic su
Modifica entità.Fai clic su Aggiungi un altro ruolo.
Nell'elenco Seleziona un ruolo, seleziona
Kubernetes Engine Developer
e poi fai clic su Salva.ZONE
: la zona in cui è in esecuzione il clusterCLUSTER_NAME
: il nome del tuo clusterPOLICY_DIR
: il percorso all'interno del repository Git che rappresenta il livello superiore del repository da sincronizzare- Esegui
kubectl config current-context
per generare il file kubeconfig necessario per l'autenticazione al cluster GKEmy-cluster
. L'utente roott genera questo file con autorizzazioni limitate. - Esegui
chmod 444 /kube/config
per rendere questo file leggibile nel passaggio successivo. - Esegui
nomos vet
sul repository Git clonato automaticamente in/workspace
. Se utilizzi un repository non strutturato, eseguinomos vet --source-format=unstructured
. Apri la pagina Trigger nella console Google Cloud .
Fai clic su Connetti repository.
Seleziona GitHub (mirroring), quindi fai clic su Continua.
Seleziona il repository, quindi fai clic su Connetti repository.
Fai clic su Aggiungi attivatore.
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 Fai clic su Crea per salvare il trigger di build.
Apri la pagina Trigger nella console Google Cloud .
Individua il trigger che hai creato, quindi fai clic su Esegui trigger.
Viene visualizzato il messaggio "Build started on master branch" (Build avviata sul ramo principale).
Fai clic su Mostra.
I passaggi di Cloud Build vengono visualizzati in verde se configurati correttamente.
- Elimina il file di configurazione di Cloud Build.
- Elimina il trigger di Cloud Build che hai creato.
- Elimina il cluster che hai utilizzato per questo tutorial.
Concedi l'autorizzazione al account di servizio Cloud Build
Concedi all'account di servizio Cloud Build l'autorizzazione per accedere al tuo cluster GKE Enterprise.
gcloud
Per aggiungere il ruolo Kubernetes Engine Developer
al 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
Crea una configurazione di Cloud Build
Crea un file di configurazione 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:
Questa configurazione prevede tre passaggi:
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.
Testa il trigger di build
Verifica manualmente la configurazione eseguendo il trigger:
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, ricevi 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 Creazione di una configurazione di base di Cloud Build.
Esegui la pulizia
Elimina il progetto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimina singole risorse
Per eliminare le singole risorse: