CI/CD

Le pipeline di integrazione continua e deployment (CI/CD) aiutano a garantire che le tue funzioni funzionino a livello locale e in un ambiente di test su Google Cloud.

Dopo aver completato lo sviluppo in locale, puoi configurare una piattaforma CI/CD come Cloud Build per eseguire i test Cloud Functions esistenti su base continuativa. I test continui assicurano che il codice continui a funzionare come previsto e che le dipendenze siano sempre aggiornate. Poiché Cloud Functions non viene aggiornato automaticamente, puoi anche configurare le pipeline CI/CD (incluse quelle create su Cloud Build) per testare e rieseguire automaticamente il deployment delle funzioni da un repository di codice sorgente come GitHub, Bitbucket o Cloud Source Repositories.

Prima di iniziare

Prima di iniziare a utilizzare questa guida, configura il tuo ambiente.

Framework di test

I framework di test forniscono un ambiente di esecuzione per i test automatici, che ti consentono di gestire deployment di produzione testati accuratamente con un impegno minimo per ogni deployment. I framework di simulazione consentono di simulare le dipendenze esterne. Una dipendenza esterna è una dipendenza su cui la funzione si basa e che non è parte del codice della tua 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 la funzione si basa e che non è parte del codice della tua funzione. Gli esempi comuni di dipendenze esterne sono altri servizi e librerie di Google Cloud installati tramite 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 le dipendenze esterne.

Una dipendenza esterna è una dipendenza su cui la funzione si basa e che non è parte del codice della tua funzione. Gli esempi comuni di dipendenze esterne sono altri servizi e librerie di Google Cloud installati che utilizzano gestori di pacchetti come pip.

Go

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

Una dipendenza esterna è una dipendenza su cui la funzione si basa e che non è parte del codice della tua funzione. Gli esempi più comuni di dipendenze esterne sono altri servizi Google Cloud e altri pacchetti che hai scaricato.

Java

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

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

Configurazione di Cloud Build

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

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 in Google Cloud Console, nell'interfaccia a riga di comando di Google Cloud e nell'URL.
  • [YOUR_FUNCTION_TRIGGER] con il valore di attivazione appropriato, ad esempio --trigger-http.
  • [YOUR_RUNTIME] con l'identificatore runtime, ad esempio nodejs10.
  • [YOUR_FUNCTION_NAME_IN_CODE] con il nome della funzione 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.

Concessione delle autorizzazioni per eseguire 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. Trovare il numero di progetto:

    gcloud projects describe PROJECT_ID
    

    Per ulteriori informazioni su come identificare il tuo progetto, consulta Creazione e gestione dei progetti.

  2. Consenti all'account di servizio Cloud Build di agire come l'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 nel repository con Cloud Build abilitato, vengono eseguiti i passaggi nel file cloudbuild.yaml.