Valider les configurations

En plus d'exécuter nomos vet manuellement ou comme hook de pré-commit en local, nous vous recommandons de valider les modifications de configuration dans votre pipeline CI/CD. Ce guide explique comment valider des configurations avec Cloud Build lors de l'utilisation de clusters GKE. La même configuration fonctionne dans tout autre système CI/CD basé sur un conteneur, tel que CircleCI, avec des modifications minimes.

Avant de commencer

Pour suivre ce guide, vous devez d'abord suivre le guide de démarrage rapide de Config Sync.

Configurer Cloud Build

Activer l'API Cloud Build

gcloud

Pour activer l'API Cloud Build, exécutez la commande suivante :

gcloud services enable cloudbuild.googleapis.com

Console

Activer l'API Cloud Build

Octroyer au compte de service Cloud Build l'autorisation d'accéder à votre cluster GKE

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 Cloud Console.

    Accéder à la page IAM

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

    [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com

  3. Cliquez sur l'icône en forme de crayon sur cette ligne.

  4. Cliquez sur Ajouter un autre rôle, sélectionnez Développeur sur Kubernetes Engine, 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

ZONE est la zone dans laquelle votre cluster est exécuté, CLUSTER_NAME est le nom de votre cluster et POLICY_DIR est le 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.

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 Repo. Utilisez le fichier de configuration Cloud Build de l'étape précédente :

  1. Ouvrez la page "Déclencheurs" dans Cloud Console.

    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$
    Créer un type de fichier de configuration Fichier de configuration Cloud Build (YAML ou 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

Vous pouvez tester la configuration en exécutant manuellement le déclencheur.

  1. Ouvrez la page "Déclencheurs" dans Cloud Console.

    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.

Par exemple, 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.

Étape suivante