Questo tutorial mostra come convalidare le configurazioni con Cloud Build quando utilizzi i cluster della versione Enterprise di Google Kubernetes Engine (GKE). La stessa configurazione funziona in qualsiasi altro sistema CI/CD basato su container, ad esempio CircleCI, con modifiche minime.
Ti consigliamo di convalidare eventuali modifiche alla configurazione nella pipeline CI/CD in aggiunta a controllare 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 di Cloud Build in modo che le tue 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:
- Config Sync (part of GKE Enterprise)
- Cloud Build
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
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
- 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.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Cloud Build.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Cloud Build.
- Crea o accedi a un cluster GKE Enterprise che soddisfa i requisiti di Config Sync. Per maggiori dettagli 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 tuo 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
Apri la pagina IAM nella console Google Cloud.
Nella colonna member (membro), individua la riga con l'account di servizio Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
Nella riga, fai clic su
Modifica entità.Fai clic su Aggiungi un altro ruolo.
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 clusterCLUSTER_NAME
: il nome del clusterPOLICY_DIR
: il percorso all'interno del repository Git che rappresenta il livello superiore del repository da sincronizzare
Questa configurazione prevede tre passaggi:
- Esegui
kubectl config current-context
per generare il file kubeconfig necessario per l'autenticazione nel cluster GKEmy-cluster
. L'utente root genera questo file con autorizzazioni limitate. - Esegui
chmod 444 /kube/config
per rendere il file leggibile nel passaggio successivo. - Esegui
nomos vet
sul repository Git che viene clonato automaticamente in/workspace
. Se utilizzi un repository non strutturato, eseguinomos vet --source-format=unstructured
invece.
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.
Apri la pagina Trigger nella console Google Cloud.
Fai clic su Connetti repository.
Seleziona GitHub (con mirroring), quindi fai clic su Continua.
Seleziona il repository e fai clic su Connetti repository.
Fai clic su Aggiungi trigger.
Inserisci o seleziona la voce corrispondente in ogni campo descritto nella seguente tabella:
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 Fai clic su Crea per salvare il trigger di build.
Testa il trigger di build
Verifica manualmente la configurazione eseguendo l'attivatore:
Apri la pagina Trigger nella console Google Cloud.
Individua il trigger che hai creato e fai clic su Esegui trigger.
Viene visualizzato il messaggio "Build iniziata sul ramo principale".
Fai clic su Mostra.
I passaggi di Cloud Build appaiono verdi se la configurazione è corretta.
Configurazioni di Cloud Build non valide
Impossibile eseguire un trigger se il file di configurazione di Cloud Build non è valido.
Per verificare, aggiorna la configurazione di Cloud Build nel repository con il file seguente. Osserva 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 l'attivatore manualmente, viene visualizzato 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, 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, completa i seguenti passaggi:
- Eliminare 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.