{"meta":{"title":"Déploiement sur Google Kubernetes Engine","intro":"Découvrez comment déployer un projet sur Google Kubernetes Engine (GKE) dans le cadre d’un flux de travail de déploiement continu (CD).","product":"GitHub Actions","breadcrumbs":[{"href":"/fr/actions","title":"GitHub Actions"},{"href":"/fr/actions/how-tos","title":"Guides pratiques"},{"href":"/fr/actions/how-tos/deploy","title":"Déployer"},{"href":"/fr/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Déployer sur des plateformes tierces"},{"href":"/fr/actions/how-tos/deploy/deploy-to-third-party-platforms/google-kubernetes-engine","title":"Moteur Google Kubernetes"}],"documentType":"article"},"body":"# Déploiement sur Google Kubernetes Engine\n\nDécouvrez comment déployer un projet sur Google Kubernetes Engine (GKE) dans le cadre d’un flux de travail de déploiement continu (CD).\n\n## Prérequis\n\nAvant de continuer à créer le workflow, vous devez effectuer les étapes suivantes pour votre projet Kubernetes. Ce guide suppose que la racine de votre projet dispose déjà d’un fichier `Dockerfile` et d’un fichier config de déploiement Kubernetes.\n\n### Création d’un cluster GKE\n\nPour créer le cluster GKE, vous devez d’abord vous authentifier à l’aide de l’interface CLI `gcloud`. Pour plus d’informations sur cette étape, consultez les articles suivants :\n\n* [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login)\n* [\n  `gcloud` CLI](https://cloud.google.com/sdk/gcloud/reference)\n* [\n  `gcloud` CLI et Kit de développement logiciel (SDK) cloud](https://cloud.google.com/sdk/gcloud#the_gcloud_cli_and_cloud_sdk)\n\nPar exemple :\n\n```shell copy\n$ gcloud container clusters create $GKE_CLUSTER \\\n    --project=$GKE_PROJECT \\\n    --zone=$GKE_ZONE\n```\n\n### Activation des API\n\nActivez les API Kubernetes Engine et Container Registry. Par exemple :\n\n```shell copy\n$ gcloud services enable \\\n    containerregistry.googleapis.com \\\n    container.googleapis.com\n```\n\n### Configuration d’un compte de service et stockage de ses informations d’identification\n\nCette procédure montre comment créer le compte de service pour votre intégration GKE. Il explique comment créer le compte, lui ajouter des rôles, récupérer ses clés et les stocker en tant que secret de référentiel encodé en base64 chiffré  nommé `GKE_SA_KEY`.\n\n1. Créer un nouveau compte de service :\n\n   ```shell copy\n   gcloud iam service-accounts create $SA_NAME\n   ```\n\n2. Récupérer l’adresse e-mail du compte de service que vous venez de créer :\n\n   ```shell copy\n   gcloud iam service-accounts list\n   ```\n\n3. Ajoutez des rôles au compte de service.\n\n   > \\[!NOTE]\n   > Appliquer des rôles plus restrictifs en fonction de vos besoins.\n\n   ```shell copy\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/container.admin\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/storage.admin\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/container.clusterViewer\n   ```\n\n4. Téléchargez le keyfile JSON pour le compte de service :\n\n   ```shell copy\n   gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL\n   ```\n\n5. Stockez la clé de compte de service en tant que secret nommé `GKE_SA_KEY` :\n\n   ```shell copy\n   export GKE_SA_KEY=$(cat key.json | base64)\n   ```\n\n   Pour plus d’informations sur la façon de stocker un secret, consultez « [Utilisation de secrets dans GitHub Actions](/fr/actions/security-guides/using-secrets-in-github-actions) ».\n\n### Stockage du nom de votre projet\n\nStockez le nom de votre projet en tant que secret nommé `GKE_PROJECT`. Pour plus d’informations sur la façon de stocker un secret, consultez « [Utilisation de secrets dans GitHub Actions](/fr/actions/security-guides/using-secrets-in-github-actions) ».\n\n### (Facultatif) Configuration de kustomize\n\nKustomize est un outil facultatif utilisé pour gérer les spécifications YAML. Après avoir créé un fichier `kustomization`, le workflow ci-dessous peut être utilisé pour définir dynamiquement les champs de l’image et du canal dans le résultat sur `kubectl`. Pour plus d’informations, consultez « [Utilisation de kustomize](https://github.com/kubernetes-sigs/kustomize#usage) ».\n\n### Si vous le souhaitez, configurez un environnement de déploiement.\n\nLes environnements sont utilisés pour décrire une cible de déploiement général comme `production`, `staging` ou `development`. Quand un workflow GitHub Actions est déployé dans un environnement, l’environnement s’affiche dans la page principale du dépôt. Vous pouvez utiliser les environnements pour exiger l’approbation d’un travail, restreindre les branches pouvant déclencher un flux de travail, contrôler les déploiements avec des règles personnalisées de protection des déploiements ou limiter l’accès aux secrets. Pour plus d’informations sur la création d’environnements, consultez [Gestion des environnements pour le déploiement](/fr/actions/deployment/targeting-different-environments/managing-environments-for-deployment).\n\n## Création du workflow\n\nUne fois les conditions préalables remplies, vous pouvez procéder à la création du workflow.\n\nL’exemple de workflow suivant montre comment créer une image conteneur et l’envoyer à GCR. Il utilise ensuite les outils Kubernetes (tels que `kubectl` et `kustomize`) pour télécharger l’image dans le cluster pour le déploiement.\n\nSous la clé `env`, remplacez la valeur de `GKE_CLUSTER` par le nom de votre cluster, `GKE_ZONE` par votre zone de cluster, `DEPLOYMENT_NAME` par le nom de votre déploiement et `IMAGE` par le nom de votre image.\n\nSi vous avez configuré un environnement de déploiement, remplacez la valeur `environment` par le nom de votre environnement. Si vous n’avez pas configuré d’environnement  ou si votre workflow se trouve dans un référentiel privé et que vous n’utilisez pas GitHub Enterprise Cloud, supprimez la clé `environment`.\n\n```yaml copy\n# Ce workflow utilise des actions qui ne sont pas certifiées par GitHub.\n# Elles sont fournies par un tiers et régies par\n# des conditions d’utilisation du service, une politique de confidentialité et un support distincts.\n# documentation en ligne.\n\n# GitHub recommande d’épingler les actions à un SHA de commit.\n# Pour obtenir une version plus récente, vous devez mettre à jour le SHA.\n# Vous pouvez également référencer une balise ou une branche, mais l’action peut changer sans avertissement.\n\nname: Build and Deploy to GKE\n\non:\n  push:\n    branches:\n      - main\n\nenv:\n  PROJECT_ID: ${{ secrets.GKE_PROJECT }}\n  GKE_CLUSTER: cluster-1    # Add your cluster name here.\n  GKE_ZONE: us-central1-c   # Add your cluster zone here.\n  DEPLOYMENT_NAME: gke-test # Add your deployment name here.\n  IMAGE: static-site\n\njobs:\n  setup-build-publish-deploy:\n    name: Setup, Build, Publish, and Deploy\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n\n    # Setup gcloud CLI\n    - uses: google-github-actions/setup-gcloud@1bee7de035d65ec5da40a31f8589e240eba8fde5\n      with:\n        service_account_key: ${{ secrets.GKE_SA_KEY }}\n        project_id: ${{ secrets.GKE_PROJECT }}\n\n    # Configure Docker to use the gcloud command-line tool as a credential\n    # helper for authentication\n    - run: |-\n        gcloud --quiet auth configure-docker\n\n    # Get the GKE credentials so we can deploy to the cluster\n    - uses: google-github-actions/get-gke-credentials@db150f2cc60d1716e61922b832eae71d2a45938f\n      with:\n        cluster_name: ${{ env.GKE_CLUSTER }}\n        location: ${{ env.GKE_ZONE }}\n        credentials: ${{ secrets.GKE_SA_KEY }}\n\n    # Build the Docker image\n    - name: Build\n      run: |-\n        docker build \\\n          --tag \"gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\" \\\n          --build-arg GITHUB_SHA=\"$GITHUB_SHA\" \\\n          --build-arg GITHUB_REF=\"$GITHUB_REF\" \\\n          .\n\n    # Push the Docker image to Google Container Registry\n    - name: Publish\n      run: |-\n        docker push \"gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\"\n\n    # Set up kustomize\n    - name: Set up Kustomize\n      run: |-\n        curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64\n        chmod u+x ./kustomize\n\n    # Deploy the Docker image to the GKE cluster\n    - name: Deploy\n      run: |-\n        ./kustomize edit set image gcr.io/PROJECT_ID/IMAGE:TAG=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\n        ./kustomize build . | kubectl apply -f -\n        kubectl rollout status deployment/$DEPLOYMENT_NAME\n        kubectl get services -o wide\n```\n\n## Pour aller plus loin\n\nPour plus d’informations sur les outils utilisés dans ces exemples, consultez la documentation suivante :\n\n* Pour obtenir le modèle de workflow complet, consultez le workflow « [Générer et déployer sur GKE](https://github.com/actions/starter-workflows/blob/main/deployments/google.yml) ».\n* Moteur de personnalisation Kubernetes YAML : [Kustomize](https://kustomize.io/).\n* « [Déploiement d’une application web conteneurisée](https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app) » dans la documentation Google Kubernetes Engine."}