Transmettre des paramètres à votre déploiement

À l'aide de Cloud Deploy, vous pouvez transmettre des paramètres pour votre version. Ces valeurs sont fournies au ou aux fichiers manifestes avant qu'ils ne soient appliqués à leurs cibles respectives. Cette substitution est effectuée après le rendu des fichiers manifestes. Les valeurs sont fournies à tous les fichiers manifestes identifiés dans votre fichier skaffold.yaml qui contiennent les espaces réservés correspondants.

Il vous suffit d'inclure des espaces réservés dans votre fichier manifeste et de définir leurs valeurs dans votre pipeline de livraison ou votre configuration cible Cloud Deploy, ou lorsque vous créez une version.

Cet article explique comment procéder.

Pourquoi utiliser des paramètres de déploiement ?

En règle générale, cela permet d'appliquer des valeurs différentes aux fichiers manifestes pour différentes cibles dans un déploiement parallèle. Toutefois, vous pouvez utiliser des paramètres de déploiement pour tout ce qui nécessite une substitution de paire clé-valeur après le rendu dans votre fichier manifeste.

Fonctionnement

Les étapes suivantes décrivent le processus général de configuration des paramètres de déploiement et de fourniture de valeurs:

  1. Pour configurer le paramétrage du déploiement, cliquez ici.

    Éléments inclus :

    • Ajoutez les espaces réservés à votre fichier manifeste.

    • Ajoutez des valeurs pour ces espaces réservés.

      Pour ce faire, vous disposez de trois méthodes, qui sont décrites ici.

  2. Lorsque vous créez une version, le fichier manifeste est rendu.

    Si vous commencez avec un fichier manifeste basé sur un modèle, les valeurs sont maintenant appliquées aux variables de modèle. Si vous commencez avec un fichier manifeste brut, il reste inchangé. Ce rendu est effectué par Skaffold.

    Toutefois, votre fichier manifeste peut contenir des variables supplémentaires pour lesquelles les valeurs ne sont pas appliquées au moment de l'affichage. Il s'agit des paramètres de déploiement décrits dans ce document.

    Lors de la création de la version, tous les paramètres de déploiement sont compilés dans un dictionnaire, qui est utilisé pour remplacer les valeurs avant l'application des fichiers manifestes.

  3. Après le rendu, Cloud Deploy remplace les valeurs des paramètres de déploiement.

    Il s'agit des valeurs que vous avez configurées à la première étape.

    Le processus de rendu avait déjà appliqué des valeurs aux modèles de manifeste, en remplaçant certaines valeurs et en ajoutant des étiquettes spécifiques à Cloud Deploy. Toutefois, les valeurs de ces paramètres de déploiement sont remplacées après le rendu. Les différences entre les modèles de fichier manifeste et les paramètres de déploiement sont décrites ici.

  4. Le fichier manifeste est appliqué à l'environnement d'exécution cible pour déployer votre application.

    Cela inclut les valeurs substituées au moment du rendu et les valeurs de tous les paramètres de déploiement.

Différentes manières de transmettre des valeurs

Il existe trois manières de définir des paramètres et des valeurs pour ces paramètres:

  • Dans la définition du pipeline de livraison

    Vous fournissez le paramètre et sa valeur dans la définition d'une étape de la progression du pipeline de livraison. Le paramètre est transmis à la cible représentée par cette étape. Si cette étape fait référence à un groupe multicible, les valeurs définies ici sont utilisées pour toutes les cibles enfants.

    Cette méthode vous permet de remplacer une valeur pour toutes les versions d'un pipeline donné, et ce pour toutes les cibles concernées. Les paramètres définis pour une étape identifient un libellé, et la cible correspondante pour cette étape doit avoir un libellé correspondant.

  • Dans la définition de la cible

    Vous configurez le paramètre et sa valeur dans la définition de la cible elle-même. Cette méthode vous permet de remplacer une valeur de cette cible pour toutes les versions.

  • Sur la ligne de commande, lorsque vous créez une version

    Vous devez inclure le paramètre et sa valeur à l'aide de l'option --deploy-parameters dans la commande gcloud deploy releases create.

    Cette méthode vous permet de remplacer une valeur au moment de la création de la version, en appliquant cette valeur aux fichiers manifestes de toutes les cibles concernées.

Pour en savoir plus sur leur configuration, cliquez ici.

Puis-je utiliser plusieurs de ces méthodes ?

Oui, vous pouvez inclure des paramètres de déploiement à l'étape du pipeline, dans la configuration cible et dans la ligne de commande. Le résultat est que tous les paramètres sont acceptés et ajoutés au dictionnaire. Toutefois, si un paramètre spécifique est transmis à plusieurs endroits, mais avec des valeurs différentes, la commande gcloud deploy releases create échoue et renvoie une erreur.

Quelle est la différence avec les modèles de fichier manifeste ?

Les paramètres de déploiement décrits dans cet article se distinguent des espaces réservés dans un fichier manifeste modélisé par la syntax. Toutefois, si vous vous demandez pourquoi il est nécessaire d'utiliser des paramètres de déploiement plutôt que d'utiliser uniquement les techniques standards pour les fichiers manifestes modélisés, le tableau suivant présente les différents objectifs:

Technique Date et heure de la substitution Applicable à
Modèle de fichier manifeste Phase d'affichage Version spécifique ; cible spécifique
Sur la ligne de commande Post-rendu Version spécifique ; toutes les cibles
Pipeline de livraison Post-rendu Toutes les versions ; objectifs spécifiques (par maison de disques)
Conforme à la cible Post-rendu Toutes les versions ; cible spécifique

Cet article ne concerne que les paramètres de déploiement (sur la ligne de commande, le pipeline et la cible), et non les fichiers manifestes modélisés.

Limites

  • Pour chaque type de paramètre, vous pouvez créer jusqu'à 25 paramètres.

  • De plus, une cible enfant peut hériter d'un maximum de 25 paramètres de son groupe multicible parent, dans la limite de 100 paramètres sur les cibles, y compris ceux définis à l'étape du pipeline.

  • Le nom de la clé est limité à 512 caractères, ainsi que l'expression régulière suivante:

    /^[a-zA-Z0-9][-A-Za-z0-9_.]{0,61}[a-zA-Z0-9]$/
    
  • Deux clés du même nom ne peuvent pas être appliquées à la même cible.

  • Le préfixe CLOUD_DEPLOY_ est réservé et ne peut pas être utilisé pour un nom de clé.

Configurer les paramètres de déploiement

Cette section explique comment configurer des valeurs de paramètre de déploiement qui seront appliquées à votre fichier manifeste Kubernetes ou à votre service Cloud Run.

En plus de configurer ces paires clé-valeur, vous devez ajouter les espaces réservés à votre fichier manifeste, comme décrit dans cette section.

Ajouter des espaces réservés à votre fichier manifeste

Dans votre fichier manifeste Kubernetes (pour GKE) ou votre fichier YAML de service (pour Cloud Run), ajoutez des espaces réservés pour toutes les valeurs que vous souhaitez remplacer après le rendu.

Syntaxe

Ces espaces réservés utilisent la syntaxe suivante:

[PROPERTY]: [DEFAULT_VALUE] # from-param: $[VAR_NAME]

Sur cette ligne...

  • PROPERTY:

    est la propriété de configuration de votre fichier manifeste Kubernetes ou du fichier YAML du service Cloud Run ;

  • DEFAULT_VALUE

    Valeur à utiliser si aucune valeur n'est fournie pour cette propriété sur la ligne de commande, ou dans la configuration du pipeline ou de la cible.

  • # from-param:

    Utilise un caractère de commentaire pour définir la directive Cloud Deploy deploy-parameters, et from-param: indique à Cloud Deploy qu'un espace réservé deploy-parameters suit.

  • $VAR_NAME

    Espace réservé à remplacer. Elle doit correspondre à la clé d'une paire clé-valeur fournie dans le pipeline de livraison ou la configuration cible, ou lors de la création de la version.

Ajouter un paramètre à l'étape du pipeline

Vous pouvez ajouter des paires clé/valeur à une étape de la progression du pipeline de livraison. Cela est utile pour les déploiements parallèles, car il permet de distinguer les cibles enfants.

  1. Ajoutez les espaces réservés à votre fichier manifeste Kubernetes ou à votre service Cloud Run, comme décrit ici.

    Exemple :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: nginx-deployment
     labels:
       app: nginx
    spec:
     replicas: 1 # from-param: ${deploy_replicas}
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:1.14.2
           ports:
           - containerPort: 80
    
  2. Configurez votre pipeline de livraison afin d'inclure deployParameters pour l'étape applicable du pipeline.

    Le fichier YAML suivant correspond à la configuration d'une étape de pipeline dont la cible est une cible multiple qui, dans ce cas, comporte deux cibles enfants:

    serialPipeline:
     stages:
       - targetId: dev
         profiles: []
       - targetId: prod  # multi-target
         profiles: []
         deployParameters:
           - values:
               deploy_replicas: 1
               log_level: "NOTICE"
             matchTargetLabels: # optional, applies to all resources if unspecified; AND'd
               my-app: "post-render-config-1"
           - values:
               deploy_replicas: 2
               log_level: "WARNING"
             matchTargetLabels: # optional, applies to all resources if unspecified; AND'd
               my-app: "post-render-config-2"
    

    Dans cette configuration de pipeline de livraison, le stanza deployParameters inclut deux values, chacun présentant les éléments suivants:

    • Nom de la variable, qui est identique à la variable que vous avez définie dans le fichier manifeste

    • La valeur de cette variable

    • Une ou plusieurs étiquettes (facultatif) à mettre en correspondance avec les étiquettes spécifiques à la cible

      Si vous ne spécifiez pas de libellé, dans une strophe matchTargetLabels, cette valeur est utilisée pour toutes les cibles de l'étape.

  3. Si vous avez inclus matchTargetLabels, vous devez également inclure des libellés sur les cibles pour les faire correspondre. De cette manière, vous identifiez la valeur à attribuer à quelle cible enfant.

    La cible doit correspondre à tous les libellés définis dans le bloc values.

    Si vous omettez matchTargetLabels, les valeurs values que vous avez définies sur le pipeline sont appliquées à toutes les cibles enfants. Toutefois, si vous définissez plusieurs valeurs pour le même paramètre, la version échouera.

Après le rendu de chaque fichier manifeste, Cloud Deploy ajoute la valeur de chaque variable au fichier manifeste rendu.

Ajouter un paramètre à la configuration cible

Vous pouvez ajouter des paires clé/valeur à une cible. Si vous utilisez des paramètres de déploiement pour faire la distinction entre plusieurs cibles enfants, configurez-les sur ces cibles enfants, et non sur le multicible.

  1. Configurez votre fichier manifeste Kubernetes ou la définition de service Cloud Run à l'aide d'un paramètre au lieu de la valeur que vous souhaitez définir au moment du déploiement.

    Exemple :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: nginx-deployment
     labels:
       app: nginx
    spec:
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:1.14.2
           env:
           - name: envvar1
             value: example1 # from-param: ${application_env1}
           - name: envvar2
             value: example2 # from-param: ${application_env2}
    

    Dans ce fichier manifeste, le paramètre envvar1 est défini sur la valeur par défaut example1, et envvar2 sur la valeur par défaut example2.

  2. Configurez vos cibles pour inclure deployParameters.

    Pour chaque paramètre que vous incluez, vous identifiez les éléments suivants:

    • Nom de la clé, qui est identique à la clé (variable) que vous avez définie dans le fichier manifeste.

    • Une valeur pour cette clé. Si vous ne fournissez pas de valeur, la valeur par défaut définie dans le fichier manifeste est utilisée.

    Le fichier YAML suivant correspond à la configuration de deux cibles. Chaque cible inclut un strophe deployParameters définissant une valeur. Chaque cible inclut également un libellé, à faire correspondre aux paramètres de déploiement configurés à l'étape du pipeline.

    apiVersion: deploy.cloud.google.com/v1beta1
    kind: Target
    metadata:
      name: prod1
      labels:
        my-app: "post-render-config-1"
    description: development cluster
    deployParameters:
      application_env1: "newValue1"
    ---
    
    apiVersion: deploy.cloud.google.com/v1beta1
    kind: target
    metadata:
      name: prod2
      labels:
        my-app: "post-render-config-2"
    description: development cluster
    deployParameters:
      application_env1: "newValue2"
    

Lors de la création de la version, mais après l'affichage des fichiers manifestes, Cloud Deploy ajoute ces valeurs aux fichiers manifestes affichés si elles incluent les clés associées.

Transmettre un paramètre lors de la création de la version

Pour transmettre des paramètres et des valeurs à la version:

  1. Configurez votre fichier manifeste Kubernetes ou la définition de service Cloud Run à l'aide d'un paramètre à la place de la valeur que vous souhaitez définir au moment du déploiement.

    Exemple :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
     name: nginx-deployment
     labels:
       app: nginx
    spec:
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       annotations:
         commit: defaultShaValue # from-param ${git-sha}
       spec:
         containers:
         - name: nginx
           image: nginx:1.14.2
    

    Dans cet exemple, le nombre d'instances répliquées dans le déploiement est défini dans la variable $deploy_replicas.

    La syntaxe de cette variable correspond à $ plus le nom de la variable. Dans cet exemple, il s'agit de $deploy_replicas.

  2. Lorsque vous créez une version, incluez l'option --deploy-parameters dans la commande gcloud deploy releases create.

    --deploy-parameters utilise une liste de paires clé/valeur séparées par une virgule, où la clé est l'espace réservé que vous avez ajouté au fichier manifeste.

    La commande ressemble à ceci:

    gcloud deploy releases create test-release-001 \
    --project=my-example-project \
    --region=us-central1 \
    --delivery-pipeline=my-params-demo-app-1 \
    --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
    --deploy-parameters="git-sha=f787cac"
    
    

Lors de la création de la version, mais après le rendu du fichier manifeste, Cloud Deploy fournit les valeurs aux fichiers manifestes affichés si ceux-ci incluent les clés associées.

Afficher tous les paramètres d'une version

Vous pouvez afficher les paramètres qui ont été définis pour une version donnée. Elles apparaissent dans un tableau sur la page Détails de la version et dans la ligne de commande (gcloud deploy releases describe).

  1. Sur la page principale de Cloud Deploy, cliquez sur le pipeline de livraison qui inclut la version que vous souhaitez afficher.

  2. Sur la page Détails de la version, sélectionnez l'onglet Artefacts.

Tous les paramètres de déploiement définis pour cette version sont affichés dans un tableau, avec le nom et la valeur de la variable dans une colonne, et la ou les cibles concernées dans l'autre colonne.

Paramètres et valeurs de déploiement affichés dans la console Google Cloud

Étapes suivantes