Valider les configurations

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 :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

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

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Cloud Build API.

    Enable the API

  8. 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

  1. Ouvrez la page "IAM" dans la console Google Cloud.

    Accéder à la page IAM

  2. Dans la colonne membre, recherchez la ligne contenant le compte de service Cloud Build :

    PROJECT_NUMBER@cloudbuild.gserviceaccount.com
    
  3. Sur cette ligne, cliquez sur Modifier le compte principal.

  4. Cliquez sur Ajouter un autre rôle.

  5. 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 cluster
  • POLICY_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 :

  1. Exécutez kubectl config current-context pour générer le fichier kubeconfig nécessaire à l'authentification auprès du cluster GKE my-cluster. L'utilisateur racine génère ce fichier avec des autorisations limitées.
  2. Exécutez chmod 444 /kube/config pour rendre ce fichier lisible à l'étape suivante.
  3. 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ôt nomos 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.

  1. Ouvrez la page Déclencheurs dans la console Google Cloud.

    Accéder à la page des déclencheurs

  2. Cliquez sur Connecter un dépôt.

  3. Sélectionnez GitHub (en miroir), puis cliquez sur Continuer.

  4. Sélectionnez votre dépôt, puis cliquez sur Connecter un dépôt.

  5. Cliquez sur Ajouter un déclencheur.

  6. 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
  7. 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 :

  1. Ouvrez la page Déclencheurs dans la console Google Cloud.

    Accéder à la page des déclencheurs

  2. 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.

  3. 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 :

  1. Supprimez le fichier de configuration Cloud Build.
  2. Supprimez le déclencheur Cloud Build que vous avez créé.
  3. Supprimez le cluster que vous avez utilisé pour ce tutoriel.

Étapes suivantes