CI/CD

Les pipelines d'intégration et de déploiement continus (CI/CD) contribuent à garantir un fonctionnement optimal de vos fonctions, à la fois localement et dans un environnement de test sur Google Cloud.

Une fois le développement local terminé, vous pouvez configurer une plate-forme CI/CD telle que Cloud Build pour exécuter vos tests Cloud Functions existants de manière continue. Les tests continus permettent de vérifier que votre code continue à fonctionner comme prévu et que vos dépendances sont à jour. Les fonctions Cloud n'étant pas mises à jour automatiquement, vous pouvez également configurer des pipelines CI/CD, y compris ceux créés en plus de Cloud Build, pour tester et redéployer automatiquement vos fonctions à partir d'un dépôt source tel que GitHub, Bitbucket ou Cloud Source Repositories.

Avant de commencer

Avant d'accéder à ce guide, configurez votre environnement.

Frameworks de test

Les frameworks de test fournissent un environnement d'exécution pour les tests automatisés, ce qui permet d'assurer des déploiements de production minutieusement testés avec une mise en œuvre minimale par déploiement. Les frameworks de simulation vous permettent de simuler des dépendances externes. Une dépendance externe est une dépendance sur laquelle repose votre fonction et qui ne fait pas partie de son code.

Node.js

Les exemples de ce guide utilisent Mocha comme framework de test pour l'exécution des tests, et Sinon comme framework de simulation pour simuler les dépendances externes.

Une dépendance externe est une dépendance sur laquelle repose votre fonction et qui ne fait pas partie de son code. Les autres services et bibliothèques Google Cloud installés à l'aide de gestionnaires de packages, tels que npm, PyPI ou Maven, sont des exemples courants de dépendances externes.

Python

Les exemples de ce guide utilisent Pytest comme framework de test pour l'exécution des tests, et unittest comme framework de simulation pour simuler les dépendances externes.

Une dépendance externe est une dépendance sur laquelle repose votre fonction et qui ne fait pas partie de son code. Les autres services et bibliothèques Google Cloud installés à l'aide de gestionnaires de packages, tels que pip, sont des exemples courants de dépendances externes.

Go

Les exemples de ce guide utilisent le package testing de la bibliothèque standard pour l'exécution des tests. Les tests système comportent toutefois des dépendances externes.

Une dépendance externe est une dépendance sur laquelle repose votre fonction et qui ne fait pas partie de son code. Les autres services Google Cloud et les packages que vous avez téléchargés sont des exemples courants de dépendances externes.

Java

Les exemples de ce guide utilisent la bibliothèque JUnit pour l'exécution des tests et Mockito comme framework de simulation pour simuler les dépendances externes.

Une dépendance externe est une dépendance sur laquelle repose votre fonction et qui ne fait pas partie de son code.

Configurer Cloud Build

Suivez les instructions du guide Automatiser les compilations à l'aide de déclencheurs en utilisant le fichier de configuration de compilation cloudbuild.yaml ci-dessous pour configurer Cloud Build afin de tester et déployer automatiquement votre fonction.

Node.js

steps:
- name: 'gcr.io/cloud-builders/npm'
  args: ['install']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/npm'
  args: ['test']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', '[YOUR_RUNTIME]', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Python

steps:
- name: 'docker.io/library/python:3.7'
  entrypoint: /bin/sh
  # Run pip install and pytest in the same build step
  # (pip packages won't be preserved in future steps!)
  args: [-c, 'pip install -r requirements.txt && pytest']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'python37', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Go

steps:
- name: 'mirror.gcr.io/library/golang'
  args: ['go', 'version']
- name: 'mirror.gcr.io/library/golang'
  args: ['go', 'test']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'go113', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Java

steps:
- name: 'gcr.io/cloud-builders/mvn'
  args: ['clean', 'verify']
  dir: 'function/dir/from/repo/root'
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['functions', 'deploy', '[YOUR_DEPLOYED_FUNCTION_NAME]', '[YOUR_FUNCTION_TRIGGER]', '--runtime', 'java11', '--entry-point', '[YOUR_FUNCTION_NAME_IN_CODE]']
  dir: 'function/dir/from/repo/root'

Remplacez :

  • [YOUR_DEPLOYED_FUNCTION_NAME] par le nom de la fonction Cloud à utiliser dans Google Cloud Console, dans le SDK Cloud et dans l'URL.
  • [YOUR_FUNCTION_TRIGGER] par la valeur appropriée du déclencheur, telle que --trigger-http.
  • [YOUR_RUNTIME] par l'identifiant d'exécution, tel que nodejs10.
  • [YOUR_FUNCTION_NAME_IN_CODE] par le nom de la fonction tel qu'il apparaît dans le code. --entry-point n'est nécessaire que si cette valeur est différente de [YOUR_DEPLOYED_FUNCTION_NAME].
  • function/dir/from/repo/root par le chemin d'accès au répertoire contenant votre fonction.

Si Cloud Build ne répond pas à vos besoins, consultez cette liste de plates-formes d'intégration continue.

Octroi d'autorisations pour générer des builds et des déploiements

Si vous utilisez Cloud Build pour déployer vos fonctions Cloud, vous devez accorder des autorisations au compte de service Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com) afin qu'il puisse exécuter des builds en votre nom.

  1. Recherchez le numéro de votre projet :

    gcloud projects describe PROJECT_ID
    

    Pour plus d'informations sur l'identification des projets, consultez la section Créer et gérer des projets.

  2. Autorisez le compte de service Cloud Build à agir en tant que compte de service d'exécution de Cloud Functions :

    gcloud iam service-accounts add-iam-policy-binding PROJECT_ID@appspot.gserviceaccount.com \
     --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
     --role roles/iam.serviceAccountUser
    
  3. Attribuez le rôle Développeur Cloud Functions au compte de service Cloud Build pour lui permettre de déployer des fonctions Cloud :

    gcloud projects add-iam-policy-binding PROJECT_ID \
     --member serviceAccount:PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
     --role roles/cloudfunctions.developer
    

Pour plus d'informations, consultez la section Rôles IAM de Cloud Functions.

Désormais, chaque fois que vous transférerez des modifications dans le dépôt avec Cloud Build activé, les étapes référencées dans le fichier cloudbuild.yaml seront exécutées.