Valider les configurations

Ce tutoriel explique comment valider des configurations avec Cloud Build lorsque vous utilisez des 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 et 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 demande à Config Sync d'utiliser nomos vet sur les configurations de votre dépôt.
  • Créez un déclencheur Cloud Build afin de vérifier vos configurations 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. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Activez l'API Cloud Build

    Activer l'API

  5. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  6. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  7. Activez l'API Cloud Build

    Activer l'API

  8. Créez ou avez accès à un cluster GKE Enterprise répondant aux exigences de Config Sync. Pour en savoir plus sur la création d'un tel cluster, consultez Premiers pas avec Config Sync.

Accorder l'autorisation au compte de service Cloud Build

Accordez 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 member (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 est exécuté.
  • 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 cloné 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 dans 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 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 Déclencheurs

  2. Recherchez le déclencheur que vous avez créé, puis cliquez sur Exécuter le déclencheur.

    Le message "Build démarré 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 non valide à 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 section Créer une configuration Cloud Build de base.

Effectuer un nettoyage

Supprimer le projet

    Supprimez un projet Google Cloud :

    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