Ce document explique comment appeler votre pipeline de livraison Cloud Deploy à partir de votre système d'intégration continue (CI).
Pour intégrer Cloud Deploy à votre système CI, il vous suffit d'ajouter un appel à la CLI gcloud
Cloud Deploy. Cet appel se produit au point de votre pipeline CI où votre application est prête à être déployée.
Avant de commencer
Les instructions de cette page supposent que vous remplissez déjà les conditions suivantes:
Vous avez activé les API applicables.
Vous avez au moins un pipeline de livraison défini et enregistré auprès de Cloud Deploy.
Vous avez au moins une cible définie et votre pipeline de livraison fait référence à cette cible.
Appeler Cloud Deploy depuis votre pipeline CI
La commande suivante crée une version, appelant donc 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'
renvoierel-1507
.'$DATE'
et'$TIME'
doivent être entre guillemets simples.PIPELINE_NAME
est le nom de votre pipeline de livraison 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 la même que celle dans laquelle vous déployez votre application.
[KEY=VALUE,...]
est une liste facultative d'une ou de 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 exécutez la commandelist
ouget
. Elles s'affichent avec la version dans la console Google Cloud, afin que vous puissiez également y consulter la provenance de la version.[IMAGE_LIST]
est une liste de remplacements entre le nom d'image et le chemin de l'image, séparés par une virgule. 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 d'artefacts de compilation Skaffold.Lorsque Cloud Deploy effectue le rendu du 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 rendu. Autrement dit, dans cet exemple,
image1
se trouve dans le fichier manifeste non affiché et est remplacé parpath/to/image1:v1@sha256:45db24
dans le fichier manifeste rendu.
Exemple d'utilisation de références directes à des images
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 en fonction de la date ou de l'heure, vous pouvez inclure '$DATE'
, 'TIME'
ou les deux. Il s'agit de l'heure UTC sur la machine sur laquelle vous appelez la commande. '$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.
Différences entre les artefacts de compilation et les images
Sur 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 conteneurs 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, transmettant un fichier d'artefacts de compilation
Exemple de compilation Docker
Le fichier YAML suivant illustre Cloud Build pour la transmission d'une image de compilation Docker et crée finalement une version Cloud Deploy.
Cet exemple compile et transfère une image dans un dépôt d'artefacts, puis construit une commande pour créer une version, avec un nom de version basé sur le SHA de commit court. Cet exemple doit être utilisé comme déclencheur SCM Cloud Build, car il repose sur la variable $COMMIT_SHA
.
Cet exemple transfère une image vers un tag Docker identique au hachage de commit du dépôt source. Ensuite, le même hachage de commit, en tant que tag Docker, est référencé à partir des arguments release-command.
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 figurant à la fin de cet exemple ("--images", "IMAGE_NAME=
) est remplacé par la référence d'image complète dans le fichier manifeste rendu.
Exemple de configuration Cloud Build avec Skaffold
Le fichier YAML suivant est le contenu d'une configuration de compilation Cloud Build qui inclut un appel à Cloud Deploy pour créer une version, dont le nom dépend de la date. Cet exemple montre également le Skaffold utilisé 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"
]
Associer des actions GitHub à 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 une livraison continue à l'aide de l'action GitHub create-cloud-deploy-release
.
Utiliser des annotations pour suivre la provenance de l'album
L'option --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 la page Utiliser des étiquettes et des annotations avec Cloud Deploy.