Ce tutoriel explique comment valider des configurations avec Cloud Build lors de l'utilisation de clusters Google Kubernetes Engine. 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 vetsur 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,
utilisez le simulateur de coût.
Une fois que vous avez terminé les tâches décrites dans ce document, supprimez les ressources que vous avez créées pour éviter que des frais vous soient facturés. Pour en savoir plus, consultez la section Effectuer un nettoyage.
Avant de commencer
- Connectez-vous à votre Google Cloud compte. 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 sans frais pour exécuter, tester et déployer des charges de travail.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Build API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.- Créez un cluster ou avoir accès à un cluster répondant aux exigences de Config Sync. Pour savoir comment créer un cluster de ce type, consultez 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.
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 Google Cloud console.
Dans la colonne membre, recherchez la ligne contenant le compte de service Cloud Build :
PROJECT_NUMBER@cloudbuild.gserviceaccount.comSur 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-contextpour 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/configpour rendre ce fichier lisible à l'étape suivante. - Exécutez
nomos vetsur 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
Supprimer un Google Cloud projet :
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.