Questo tutorial mostra come convalidare le configurazioni con Cloud Build quando utilizzi i cluster Google Kubernetes Engine (GKE) Enterprise Edition. La stessa configurazione funziona un 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 controllare la validità delle configurazioni, eseguendo il comando nomos vet
.
Obiettivi
- Crea un file di configurazione Cloud Build che indichi a Config Sync di utilizzare
nomos vet
per le configurazioni nel tuo 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 basata sull'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
- 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.
- Creare o avere accesso a un cluster GKE Enterprise che soddisfi le requisiti per Config Sync. Per maggiori dettagli su come creare un cluster, consulta Inizia a utilizzare Config Sync.
Concedi l'autorizzazione all'account di servizio Cloud Build
Concedi all'account di servizio Cloud Build l'autorizzazione ad accedere di un cluster GKE Enterprise.
gcloud
Per aggiungere il ruolo Kubernetes Engine Developer
all'account di servizio Cloud Build, esegui il seguente 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, trova la riga con l'account di servizio Cloud Build:
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
Nella riga, fai clic su
Modifica principal.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 file kubeconfig necessaria per l'autenticazione nel cluster GKE dimy-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
nel repository Git che viene clonato automaticamente/workspace
. Se utilizzi un repository non strutturato, eseguinomos vet --source-format=unstructured
.
Creare un trigger di compilazione
L'esempio seguente crea un trigger che viene eseguito per ogni commit nel master di un repository Cloud Source Repositories.
Apri la pagina Trigger nella console Google Cloud.
Fai clic su Connetti repository.
Seleziona GitHub (con mirroring) e fai clic su Continua.
Seleziona il tuo repository, quindi fai clic su Connetti repository.
Fai clic su Aggiungi attivatore.
Inserire o selezionare la voce corrispondente in ciascun campo descritto in tabella seguente:
Campo Voce Evento Push su un branch 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 l'trigger di build
Testa manualmente la configurazione eseguendo l'attivatore:
Apri la pagina Trigger nella console Google Cloud.
Trova il trigger che hai creato e fai clic su Esegui trigger.
Il messaggio "Build avviata sul ramo master" .
Fai clic su Mostra.
Se configurato correttamente, i passaggi di Cloud Build appaiono di colore verde.
Configurazioni Cloud Build non valide
Un trigger non può essere eseguito se il file di configurazione di Cloud Build non è valido.
Per verificare, 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, viene visualizzato 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, inserisci path:
nella riga 6 allo stesso livello di name:
nella riga 5. Per ulteriori informazioni sulla struttura di una build di Cloud Build
di configurazione del deployment, consulta la sezione Creazione di una build di base di Cloud Build
config.
Esegui la pulizia
Elimina il progetto
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Elimina singole risorse
Per eliminare le singole risorse:
- Elimina il file di configurazione di Cloud Build.
- Elimina l'trigger di Cloud Build che hai creato.
- Elimina il cluster che hai utilizzato per questo tutorial.