Ce tutoriel vous explique comment valider des configurations avec Cloud Build lors de l'utilisation de clusters Google Kubernetes Engine (GKE) Enterprise. La même configuration fonctionne dans tout autre système CI/CD basé sur un conteneur, tel que CircleCI, avec des modifications minimes.
Nous vous recommandons de valider les modifications de configuration dans votre pipeline CI/CD en plus de vérifier la validité de vos configurations en exécutant la commande nomos vet
.
Objectifs
- Créez un fichier de configuration Cloud Build qui indique à Config Sync d'utiliser
nomos vet
sur les configurations de votre dépôt. - Créez un déclencheur Cloud Build afin que vos configurations soient vérifiées chaque fois que la branche de développement est modifiée.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
- Config Sync (part of GKE Enterprise)
- Cloud Build
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- 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.
- Créez ou ayez accès à un cluster GKE Enterprise répondant aux exigences de Config Sync. Pour en savoir plus sur la création de ce type de cluster, consultez la section Premiers pas avec Config Sync.
Accorder l'autorisation au compte de service Cloud Build
Accorder au compte de service Cloud Build l'autorisation d'accéder à votre cluster GKE Enterprise
gcloud
Pour ajouter le rôle Kubernetes Engine Developer
au compte de service Cloud Build, exécutez la commande suivante :
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
Ouvrez la page "IAM" dans la console Google Cloud.
Dans la colonne membre, recherchez la ligne contenant le compte de service Cloud Build :
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
Sur cette ligne, cliquez sur
Modifier le compte principal.Cliquez sur Ajouter un autre rôle.
Dans la liste Sélectionner un rôle, sélectionnez
Kubernetes Engine Developer
, puis cliquez sur Enregistrer.
Créer une configuration Cloud Build
Créez un fichier de configuration Cloud Build et stockez-le dans le répertoire racine du dépôt contenant vos fichiers de configuration (par exemple, 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
Remplacez les éléments suivants :
ZONE
: zone dans laquelle votre cluster s'exécute.CLUSTER_NAME
: nom du clusterPOLICY_DIR
: chemin d'accès dans le dépôt Git qui représente le niveau supérieur du dépôt à synchroniser.
Cette configuration comporte trois étapes :
- Exécutez
kubectl config current-context
pour générer le fichier kubeconfig nécessaire à l'authentification auprès du cluster GKEmy-cluster
. L'utilisateur racine génère ce fichier avec des autorisations limitées. - Exécutez
chmod 444 /kube/config
pour rendre ce fichier lisible à l'étape suivante. - Exécutez
nomos vet
sur le dépôt Git qui est automatiquement copié dans/workspace
. Si vous utilisez un dépôt non structuré, exécutez plutôtnomos vet --source-format=unstructured
.
Créer un déclencheur de compilation
L'exemple suivant crée un déclencheur qui s'exécute pour chaque commit sur la branche principale d'un dépôt Cloud Source Repositories.
Ouvrez la page Déclencheurs dans la console Google Cloud.
Cliquez sur Connecter un dépôt.
Sélectionnez GitHub (en miroir), puis cliquez sur Continuer.
Sélectionnez votre dépôt, puis cliquez sur Connecter un dépôt.
Cliquez sur Ajouter un déclencheur.
Saisissez ou sélectionnez l'entrée correspondante dans chaque champ décrit dans le tableau suivant :
Champ Entrée Événement Déployer sur une branche Branche ^master$ Configuration Le fichier de configuration Cloud Build (yaml or json) Emplacement du fichier de configuration Cloud Build / cloudbuild.yaml Cliquez sur Créer pour enregistrer le déclencheur de compilation.
Tester le déclencheur de compilation
Testez manuellement la configuration en exécutant le déclencheur :
Ouvrez la page Déclencheurs dans la console Google Cloud.
Recherchez le déclencheur que vous avez créé, puis cliquez sur Exécuter le déclencheur.
Le message "Version exécutée sur la branche principale" s'affiche.
Cliquez sur Afficher.
Les étapes Cloud Build s'affichent en vert si elles sont configurées correctement.
Configurations Cloud Build non valides
Un déclencheur ne peut pas être exécuté si le fichier de configuration Cloud Build n'est pas valide.
Pour tester cela, mettez à jour la configuration Cloud Build dans votre dépôt avec le fichier suivant. Notez le retrait incorrect à la ligne 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
Si vous exécutez de nouveau manuellement le déclencheur, vous recevez le message d'erreur suivant, car path:
à la ligne 6 n'est pas correctement mis en retrait :
Failed to trigger build: failed unmarshalling build config cloudbuild.yaml:
unknown field "path" in cloudbuild_go_proto.BuildStep.
Pour corriger cette configuration, mettez en retrait path:
à la ligne 6 au même niveau que name:
à la ligne 5. Pour en savoir plus sur la structure d'un fichier de configuration Cloud Build, consultez la page Créer une configuration Cloud Build de base.
Effectuer un nettoyage
Supprimer le projet
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Supprimer des ressources individuelles
Pour supprimer les ressources individuelles, procédez comme suit :
- Supprimez le fichier de configuration Cloud Build.
- Supprimez le déclencheur Cloud Build que vous avez créé.
- Supprimez le cluster que vous avez utilisé pour ce tutoriel.
Étapes suivantes
- Apprenez-en davantage sur Cloud Build
- Arrêtez temporairement la synchronisation des configurations.