Intégrer la passerelle Connect à Cloud Build
Ce tutoriel de base vous explique comment intégrer Cloud Build à la passerelle Connect. Il vous permet de créer un pipeline CI/CD pour des clusters GKE exécutés dans de nombreux environnements.
Ce tutoriel part du principe que vous connaissez les sections précédentes du guide de la passerelle Connect et que vous maîtrisez Cloud Build. Ces instructions s'appuient sur l'image de compilateur cloud-sdk
, qui nécessite quelques scripts mineurs (comme illustré ci-dessous).
Avant de commencer
Assurez-vous que les outils de ligne de commande suivants sont installés :
- La dernière version de Google Cloud CLI qui inclut
gcloud
, l'outil de ligne de commande qui permet d'interagir avec Google Cloud. kubectl
Si vous utilisez Cloud Shell comme environnement shell pour interagir avec Google Cloud, ces outils sont installés pour vous.
- La dernière version de Google Cloud CLI qui inclut
Assurez-vous d'avoir initialisé gcloud CLI à utiliser avec votre projet.
Assurez-vous que la passerelle Connect et les autres API requises sont activées pour votre projet, comme décrit dans le guide de configuration.
1. Attribuer des rôles IAM au compte de service Cloud Build
Par défaut, Cloud Build utilise un compte de service Google Cloud pour exécuter toutes les tâches requises, avec une adresse au format MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com
. Vous trouverez l'adresse e-mail du compte de service de votre projet sous Cloud Build – Paramètres dans la console Google Cloud.
Suivez les instructions de la section Accorder des autorisations IAM du guide de configuration de la passerelle pour attribuer à ce compte les rôles requis dans votre projet.
2. Spécifier des stratégies RBAC pour le compte de service Cloud Build
Suivez les instructions de la section Configurer les stratégies RBAC du guide de configuration de la passerelle pour attribuer au compte de service Cloud Build les autorisations appropriées sur tous les clusters que vous souhaitez utiliser.
Nous vous recommandons vivement d'utiliser Policy Controller pour déployer et gérer les stratégies RBAC sur plusieurs clusters.
3. Créer un pipeline Cloud Build
Le workflow Cloud Build a besoin d'un fichier cloudbuild.yaml
pour configurer le pipeline. Voici un exemple simple qui déploie un fichier manifeste statique sur deux clusters différents (un cluster GKE sur Google Cloud et un sur VMware). Pour en savoir plus sur la configuration d'un pipeline Cloud Build, consultez la documentation Cloud Build.
steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to cluster on Google Cloud
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-gke-cluster && \
kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: Deploy to cluster on VMware
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-vmware-cluster && \
kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
Vous pouvez placer le workflow de votre choix dans myapp.yaml
pour configurer les clusters. Voici un exemple :
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Après avoir transféré votre configuration vers votre dépôt Git, le workflow Cloud Build déploie l'application requise sur les clusters spécifiés. Vous pouvez également configurer Cloud Build pour détecter les modifications apportées au dépôt Git associé afin de déclencher la mise à jour ou l'installation d'une application automatisée.
Utilisation avancée
Étant donné qu'il utilise les concepts standards de Cloud Build, vous pouvez adapter et personnaliser notre exemple en fonction de vos besoins CI/CD spécifiques. Si vous souhaitez créer une image à partir de zéro et la déployer dans votre pipeline, vous pouvez utiliser le mode de préparation du compilateur gke-deploy
. Par exemple, la configuration Cloud Build suivante :
- Crée une image Docker à partir du fichier Dockerfile à la racine du dépôt Git et lui ajoute un tag avec le SHA Git.
- Transfère l'image taguée vers le registre de conteneurs du projet.
- Prépare les fichiers manifestes Kubernetes dans le répertoire
manifest
en définissant le ou les tags d'image corrects, en plaçant les fichiers manifestes de sortie dansoutput/expanded
. - Déploie sur un cluster GKE sur site à l'aide de la passerelle Connect.
steps:
- name: 'gcr.io/cloud-builders/docker'
id: "Build Container"
args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
id: "Push to GCR"
args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
id: "Prepare Manifests"
args:
- prepare
- --filename=manifests/
- --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: bash
id: "Deploy to cluster on VMware
args:
- '-c'
- |
set -x && \
export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
gcloud container fleet memberships get-credentials my-vmware-cluster && \
kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded
Notez que dans cet exemple, nous avons dû créer un secret d'extraction d'image pour autoriser le cluster GKE sur site à extraire des images de Container Registry.
Pour en savoir plus sur l'utilisation de Cloud Build, consultez la documentation Cloud Build.