Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

CI/CD

Le pipeline di integrazione e deployment continui (CI/CD) contribuiscono a garantire che le funzioni funzionino sia localmente sia in un ambiente di test su Google Cloud.

Una volta completato lo sviluppo in locale, puoi configurare una piattaforma CI/CD come Cloud Build per eseguire regolarmente i test di Cloud Functions esistenti. I test continui assicurano che il codice continui a funzionare come previsto e che le dipendenze rimangano aggiornate. Poiché le funzioni Cloud Functions non vengono aggiornate automaticamente, puoi anche configurare le pipeline CI/CD (incluse quelle create su Cloud Build) per testare ed eseguire nuovamente il deployment delle tue funzioni da un repository di codice sorgente come GitHub, Bitbucket o Cloud Source Repositories.

Prima di iniziare

Prima di iniziare questa guida, configura il tuo ambiente.

Framework di test

I framework di test forniscono un ambiente di esecuzione per i test automatici, che ti consente di mantenere deployment di produzione testati in modo approfondito con uno sforzo minimo per deployment. I modelli di simulazione ti consentono di simulare le dipendenze esterne. Una dipendenza esterna è una dipendenza su cui si basa la tua funzione che non fa parte del codice della funzione.

Node.js

Gli esempi in questa guida utilizzano Mocha come framework di test per eseguire test e Sinon come framework di simulazione per simulare le dipendenze esterne.

Una dipendenza esterna è una dipendenza su cui si basa la tua funzione che non fa parte del codice della funzione. Esempi di dipendenze esterne sono comuni altri servizi e librerie di Google Cloud installati utilizzando i gestori di pacchetti, come npm, PyPI o Maven.

Python

Gli esempi in questa guida utilizzano Pytest come framework di test per eseguire test e unittest come framework di simulazione per simulare dipendenze esterne.

Una dipendenza esterna è una dipendenza su cui si basa la tua funzione che non fa parte del codice della funzione. Esempi di dipendenze esterne sono gli altri servizi e librerie di Google Cloud installati utilizzando i gestori di pacchetti, come pip.

Go

Gli esempi in questa guida utilizzano il pacchetto standard della libreria testing per eseguire test. Tuttavia, i test di sistema hanno dipendenze esterne.

Una dipendenza esterna è una dipendenza su cui si basa la tua funzione che non fa parte del codice della funzione. Esempi di dipendenze esterne sono gli altri servizi Google Cloud e altri pacchetti scaricati.

Java

Gli esempi in questa guida utilizzano la libreria JUnit per eseguire i test e Mockito come framework di simulazione per simulare le dipendenze esterne.

Una dipendenza esterna è una dipendenza su cui si basa la tua funzione che non fa parte del codice della funzione.

Configurazione di Cloud Build

Segui le istruzioni nella guida Automazione delle build con i trigger di build mediante il file di configurazione della build cloudbuild.yaml di seguito per configurare Cloud Build per testare ed eseguire il deployment della tua funzione automaticamente.

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.10'
  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: golang
  args: ['go', 'version']
- name: 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', 'go116', '--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'

Sostituisci:

  • [YOUR_DEPLOYED_FUNCTION_NAME] con il nome delle tue funzioni Cloud Functions da utilizzare nella console Google Cloud, in Google Cloud CLI e nell'URL.
  • [YOUR_FUNCTION_TRIGGER] con il valore attivatore appropriato, ad esempio --trigger-http.
  • [YOUR_RUNTIME] con l'identificatore di runtime, ad esempio nodejs10.
  • [YOUR_FUNCTION_NAME_IN_CODE] con il nome della funzione così come appare nel codice. --entry-point è necessario solo se questo valore è diverso da [YOUR_DEPLOYED_FUNCTION_NAME].
  • function/dir/from/repo/root con il percorso della directory contenente la funzione e i relativi elenchi di dipendenze.

Concessione delle autorizzazioni per l'esecuzione di build e deployment

Se utilizzi Cloud Build per eseguire il deployment di Cloud Functions, devi concedere le autorizzazioni all'account di servizio Cloud Build (PROJECT_NUMBER@cloudbuild.gserviceaccount.com). L'account di servizio Cloud Build viene utilizzato per eseguire le build per tuo conto.

  1. Individua il numero del progetto:

    gcloud projects describe PROJECT_ID
    

    Per scoprire di più su come identificare il tuo progetto, consulta la sezione Creazione e gestione dei progetti.

  2. Consenti all'account di servizio Cloud Build di agire come account di servizio Cloud Functions Runtime:

    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. Assegna il ruolo Sviluppatore Cloud Functions all'account di servizio Cloud Build, che consente a Cloud Build di eseguire il deployment di Cloud Functions:

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

Per ulteriori informazioni, consulta Ruoli IAM di Cloud Functions.

Ora, ogni volta che esegui il push al repository in cui Cloud Build è abilitato, vengono eseguiti i passaggi nel file cloudbuild.yaml.