Intégrer Cloud Deploy à votre système CI

Ce document explique comment appeler votre pipeline de diffusion Cloud Deploy à partir de votre système d'intégration continue (CI).

L'intégration de Cloud Deploy à votre système CI est aussi simple que l'ajout d'un appel à la CLI gcloud de Cloud Deploy. Cet appel se produit au moment où votre application est prête à être déployée dans votre pipeline d'intégration continue.

Avant de commencer

Les instructions de cette page partent du principe que vous remplissez déjà les conditions suivantes :

Appeler Cloud Deploy à partir de votre pipeline CI

La commande suivante crée une version, ce qui appelle une instance de pipeline de livraison :

gcloud deploy releases create RELEASE_NAME \
  --delivery-pipeline=PIPELINE_NAME \
  --region=REGION \
  --annotations=[KEY=VALUE,...] \
  --images=[IMAGE_LIST]

Où...

  • RELEASE_NAME

    est le nom que vous donnez à cette version. Veuillez indiquer une valeur.

    Vous pouvez spécifier des noms de version dynamiques en incluant '$DATE', '$TIME' ou les deux. Par exemple, si vous appelez cette commande à 15h07 UTC, 'rel-$TIME' est résolu en rel-1507. '$DATE' et '$TIME' doivent être entre guillemets simples.

  • PIPELINE_NAME

    correspond au nom de votre pipeline de diffusion enregistré. Veuillez indiquer une valeur.

  • REGION

    correspond à la région dans laquelle vous créez cette version. La région ne doit pas nécessairement être celle dans laquelle vous déployez votre application.

  • [KEY=VALUE,...]

    est une liste facultative d'une ou plusieurs annotations à appliquer à la version, sous la forme de paires clé/valeur.

    Vous pouvez utiliser des annotations pour suivre la provenance des versions, par exemple en transmettant une annotation telle que commitId=0065ca0. Toutes les annotations de la version sont renvoyées lorsque vous list ou get la version. Elles s'affichent avec la version dans la console Google Cloud , ce qui vous permet également de voir la provenance de la version.

  • [IMAGE_LIST]

    est une liste de remplacements de nom d'image par un chemin d'accès à l'image, séparés par une virgule. Par exemple : --images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18.

    Cette valeur n'est pas obligatoire si vous transmettez --build-artifacts, qui identifie un fichier de sortie des artefacts de compilation Skaffold.

    Lorsque Cloud Deploy affiche le fichier manifeste, le nom de l'image dans le fichier manifeste non affiché est remplacé par la référence complète de l'image dans le fichier manifeste affiché. Autrement dit, image1, dans cet exemple, se trouve dans le fichier manifeste non affiché et est remplacé dans le fichier manifeste affiché par path/to/image1:v1@sha256:45db24.

Exemple utilisant une référence d'image directe

La commande suivante crée une version en transmettant directement une référence d'image, plutôt qu'un fichier d'artefacts de compilation :

gcloud deploy releases create my-release \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

Dans cet exemple, my-release est le nom de la version. Si vous souhaitez générer un nom de version basé sur la date ou l'heure, vous pouvez inclure '$DATE' ou 'TIME', ou les deux. L'heure est celle de la machine sur laquelle vous exécutez la commande (UTC). '$DATE' et '$TIME' doivent être entre guillemets simples.

Exemple :

gcloud deploy releases create rel-'$DATE'-'$TIME' \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --images=image1=path/to/image1:v1@sha256:45db24

Dans cet exemple, la commande génère un nom de version avec le préfixe rel-, ainsi que la date et l'heure, par exemple : rel-20220131-1507.

Il est également courant d'utiliser le SHA Git dans un nom de version. Consultez les exemples Cloud Build et Docker dans ce document.

Artefacts de compilation et images

Dans la commande gcloud deploy releases create, vous pouvez transmettre un ensemble de références d'images ou une référence de fichier d'artefacts de compilation.

  • Utilisez --images=[NAME=TAG,...] pour faire référence à une ou plusieurs images de conteneur individuelles.

    Cette valeur est une référence à un ensemble de remplacements de nom d'image spécifique par un chemin complet d'image. Exemple :

    gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24

  • Utilisez --build-artifacts= pour pointer vers un fichier de sortie d'artefacts de compilation Skaffold.

Exemples Cloud Build, transmission d'un fichier d'artefacts de compilation

Exemple de compilation Docker

Le fichier YAML suivant illustre Cloud Build pour un transfert d'image Docker et crée finalement une version Cloud Deploy.

Cet exemple crée et envoie une image à un dépôt d'artefacts, puis crée une commande permettant de créer une version, avec un nom de version basé sur le code SHA abrégé du commit. Cet exemple doit être utilisé comme déclencheur Cloud Build SCM, car il s'appuie sur la variable $COMMIT_SHA.

Cet exemple envoie une image à un tag Docker qui est identique au hachage de commit du dépôt source. Le même hachage de commit, en tant que tag Docker, est ensuite référencé à partir des arguments de la commande de publication.

steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
  args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
    ]

Notez que le nom de l'image à la fin de cet exemple, "--images", "IMAGE_NAME=, est remplacé dans le fichier manifeste affiché par la référence complète de l'image.

Exemple de configuration Cloud Build à l'aide de Skaffold

Le fichier YAML suivant correspond au contenu d'une configuration de compilation Cloud Build qui inclut un appel à Cloud Deploy pour créer une version, avec un nom de version basé sur la date. Cet exemple montre également l'utilisation de Skaffold pour la compilation.

steps:
- name: gcr.io/k8s-skaffold/skaffold
  args:
    - skaffold
    - build
    - '--interactive=false'
    - '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
  entrypoint: gcloud
  args:
    [
      "deploy", "releases", "create", "rel-${SHORT_SHA}",
      "--delivery-pipeline", "PIPELINE_NAME",
      "--region", "us-central1",
      "--annotations", "commitId=${REVISION_ID}",
      "--build-artifacts", "/workspace/artifacts.json"
    ]

Connecter GitHub Actions à Cloud Deploy

Si vous utilisez GitHub Actions pour l'intégration continue ou d'autres activités liées à la livraison de logiciels, vous pouvez vous connecter à Cloud Deploy pour la livraison continue à l'aide de l'action GitHub create-cloud-deploy-release.

Connecter GitLab à Cloud Deploy

Si vous utilisez GitLab pour l'intégration continue, vous pouvez utiliser le composant GitLab Cloud Deploy create-cloud-deploy-release pour créer une version Cloud Deploy.

Vous pouvez également essayer le tutoriel de bout en bout pour utiliser GitLab avec Google Cloud.

Utiliser des annotations pour suivre la provenance de la version

L'indicateur --annotations= vous permet d'appliquer une ou plusieurs paires clé/valeur arbitraires à la version créée par cette commande. Vous devez ajouter cette option à la commande gcloud deploy releases create.

Par exemple, vous pouvez utiliser les paires clé-valeur suivantes pour suivre la source de l'image à déployer.

Exemple :

gcloud deploy releases create web-app-1029rel \
  --delivery-pipeline=web-app \
  --region=us-central1 \
  --annotations=commitId=0065ca0,author=user@company.com \
  --images=image1=path/to/image1:v1@sha256:45db24

Vous pouvez également créer une annotation dont la valeur est l'URL pointant vers la demande d'extraction, par exemple. Pour en savoir plus, consultez Utiliser des libellés et des annotations avec Cloud Deploy.