Automazione dei deployment

Last reviewed 2023-07-17 UTC

Questo documento nel framework dell'architettura Google Cloud fornisce le best practice per l'automazione di build, test e deployment.

L'Automation ti aiuta a standardizzare build, test e deployment eliminando gli errori causati dall'uomo per processi ripetuti come gli aggiornamenti del codice. Questa sezione descrive come utilizzare vari controlli e protezioni durante l'automazione. Un processo standardizzato controllato da macchina garantisce l'applicazione sicura. Fornisce inoltre un meccanismo per ripristinare i deployment precedenti in base alle esigenze senza influire notevolmente sull'esperienza utente.

Archivia il tuo codice nei repository di codici centrali

Archivia il tuo codice in repository di codice centrali che includono un sistema di controllo della versione con tagging e la possibilità di eseguire il rollback delle modifiche al codice. Il controllo della versione consente di organizzare i file e controllare l'accesso, gli aggiornamenti e l'eliminazione nei team e nelle organizzazioni.

Per diverse fasi dello sviluppo, versioni ed etichetta i repository in base alle esigenze. Ad esempio, le etichette potrebbero essere test, dev e prod.

In Google Cloud puoi archiviare il codice in Cloud Source Repositories, creare versioni e integrarle con altri prodotti Google Cloud. Se stai creando applicazioni containerizzate, utilizza Artifact Registry, un registro gestito per i container.

Per maggiori dettagli sul controllo della versione, consulta Controllo della versione. Per maggiori dettagli sull'implementazione dello sviluppo basato su trunk con i tuoi repository, consulta Sviluppo basato su trunk.

Utilizza l'integrazione e il deployment continui

Automatizza i deployment utilizzando un approccio di integrazione e deployment continui (CI/CD). Un approccio CI/CD è una combinazione di pipeline configurate e processi seguiti dal tuo team di sviluppo.

L'approccio CI/CD aumenta la velocità di deployment aumentando la produttività del team di sviluppo software. Questo approccio consente agli sviluppatori di apportare modifiche più piccole e più frequenti che vengono testate in modo approfondito, riducendo al contempo il tempo necessario per il deployment di tali modifiche.

Nell'ambito del tuo approccio CI/CD, automatizza tutti i passaggi che fanno parte della creazione, del test e del deployment del codice. Ad esempio:

  • Ogni volta che viene eseguito il commit di un nuovo codice nel repository, fai in modo che il commit richiami automaticamente la pipeline di creazione e test.
  • Automatizza i test di integrazione.
  • Automatizza il deployment in modo che le modifiche vengano implementate dopo che la build soddisfa criteri di test specifici.

In Google Cloud, puoi utilizzare Cloud Build e Cloud Deploy per le tue pipeline CI/CD.

Usa Cloud Build per definire le dipendenze e le versioni che puoi utilizzare per la pacchettizzazione e la creazione di un pacchetto dell'applicazione. Versione della configurazione della build per assicurarti che tutte le build siano coerenti e per assicurarti di poter eseguire il rollback a una configurazione precedente, se necessario.

Usa Cloud Deploy per il deployment delle tue applicazioni in ambienti specifici su Google Cloud e per gestire le pipeline di deployment.

Per maggiori dettagli sull'implementazione di CI/CD, consulta Integrazione continua e Automazione del deployment.

Esegui il provisioning e la gestione dell'infrastruttura utilizzando Infrastructure as Code

Infrastructure as Code è l'uso di un modello descrittivo per gestire l'infrastruttura, ad esempio VM, e configurazioni, ad esempio le regole firewall. Infrastructure as Code ti consente di:

  • Crea automaticamente le tue risorse cloud, compresi gli ambienti di deployment o test per la pipeline CI/CD.
  • Gestisci le modifiche all'infrastruttura come quelle alle applicazioni. Ad esempio, assicurati che le modifiche alla configurazione vengano esaminate, testate e possano essere controllate.
  • Avere un'unica versione della verità per la tua infrastruttura cloud.
  • Replica il tuo ambiente cloud in base alle esigenze.
  • Se necessario, esegui il rollback a una configurazione precedente.

Questo concetto di Infrastructure as Code si applica anche ai progetti in Google Cloud. Puoi utilizzare questo approccio per definire risorse come la connettività VPC condiviso o l'accesso Identity and Access Management (IAM) nei tuoi progetti. Per un esempio di questo approccio, consulta il modulo Terraform per la fabbrica di progetti Google Cloud.

Gli strumenti di terze parti, come Terraform, ti consentono di creare automaticamente la tua infrastruttura su Google Cloud. Per saperne di più, consulta Gestire l'infrastruttura come codice con Terraform, Cloud Build e GitOps.

Prendi in considerazione l'utilizzo delle funzionalità di Google Cloud, come i blocchi dei progetti, i criteri di conservazione di Cloud Storage e i blocchi dei bucket di Cloud Storage, per proteggere le risorse critiche dall'eliminazione accidentale o dolosa.

Incorpora test durante tutto il ciclo di vita della distribuzione del software

I test sono fondamentali per avviare correttamente il software. I test continui aiutano i team a creare più velocemente software di alta qualità e a migliorarne la stabilità.

Tipi di test:

  • Test delle unità. I test delle unità sono veloci e consentono di eseguire deployment in tempi rapidi. Tratta i test delle unità come parte del codebase e includili come parte del processo di compilazione.
  • Test di integrazione. I test di integrazione sono importanti, soprattutto per i carichi di lavoro progettati per la scalabilità e che dipendono da più di un servizio. Questi test possono diventare complessi quando esegui il test dell'integrazione con i servizi interconnessi.
  • Test del sistema. I test di sistema sono complessi e dispendiosi in termini di tempo, ma aiutano a identificare i casi limite e a risolvere i problemi prima del deployment.
  • Altri test. Devi eseguire altri test, tra cui test statici, test di carico, test di sicurezza, test di convalida dei criteri e altri. Esegui questi test prima di eseguire il deployment dell'applicazione in produzione.

Per incorporare i test:

  • Esegui tutti i tipi di test continuamente per tutto il ciclo di vita di distribuzione del software.
  • Automatizza questi test e includili nella pipeline CI/CD. Fai in modo che la pipeline abbia esito negativo se uno o più test hanno esito negativo.
  • Aggiorna e aggiungi continuamente nuovi test per migliorare e mantenere l'integrità operativa del deployment.

Per i tuoi ambienti di test:

  • Utilizza progetti Google Cloud separati per ogni ambiente di test di cui disponi. Per ogni applicazione, utilizza un ambiente di progetto distinto. Questa separazione fornisce una chiara demarcazione tra le risorse dell'ambiente di produzione e le risorse degli ambienti inferiori. Questa separazione garantisce che le modifiche in un ambiente non influiscano accidentalmente su altri ambienti.
  • Automatizza la creazione di ambienti di test. Un modo per farlo è utilizzare Infrastructure as Code.
  • Utilizza un ambiente di produzione sintetico per testare le modifiche. Questo ambiente offre un ambiente simile alla produzione per testare l'applicazione ed eseguire vari tipi di test sui carichi di lavoro, tra cui test end-to-end e test delle prestazioni.

Per saperne di più sull'implementazione dei test continui, consulta Testare l'automazione.

Avvia gradualmente i deployment

Scegli la strategia di deployment in base a parametri importanti, come interruzione minima per gli utenti finali, aggiornamenti in sequenza, strategie di rollback e strategie di test A/B. Per ogni carico di lavoro, valuta questi requisiti e scegli una strategia di deployment tra tecniche collaudate come aggiornamenti in sequenza, deployment blu/verde e deployment canary.

Consenti ai processi CI/CD di apportare modifiche ed eseguirne il push nel tuo ambiente di produzione.

Prendi in considerazione l'utilizzo di un'infrastruttura immutabile. Un'infrastruttura immutabile è un'infrastruttura che non viene modificata o aggiornata. Quando devi eseguire il deployment di un nuovo codice o modificare qualsiasi altra configurazione nel tuo ambiente, devi sostituire l'intero ambiente (ad esempio una raccolta di VM o pod) con il nuovo ambiente. I deployment blu/verde sono un esempio di infrastruttura immutabile.

Ti consigliamo di eseguire i test canary e osservare il sistema per rilevare eventuali errori durante il deployment delle modifiche. Questo tipo di osservazione è più semplice se disponi di un solido sistema di monitoraggio e avviso. Per eseguire i test A/B o canary, puoi utilizzare i gruppi di istanze gestite di Google Cloud. Poi potrai eseguire un'implementazione lenta o un ripristino, se necessario.

Valuta la possibilità di utilizzare Cloud Deploy per automatizzare i deployment e gestire la pipeline di deployment. Inoltre, puoi utilizzare molti strumenti di terze parti, come Spinnaker e Tekton, su Google Cloud, sia per i deployment automatici sia per la creazione di pipeline di deployment.

Ripristina facilmente le release precedenti

Definire la strategia di ripristino come parte della strategia di deployment. Assicurati di poter eseguire il rollback di un deployment o di una configurazione dell'infrastruttura a una versione precedente del codice sorgente. Il ripristino di un deployment stabile precedente è un passaggio importante nella gestione degli incidenti sia per l'affidabilità che per gli incidenti di sicurezza.

Assicurati inoltre di poter ripristinare l'ambiente allo stato in cui si trovava prima dell'avvio del processo di deployment. Questi possono includere:

  • Possibilità di annullare qualsiasi modifica al codice nell'applicazione.
  • Possibilità di ripristinare qualsiasi modifica alla configurazione apportata all'ambiente.
  • Utilizzando un'infrastruttura immutabile e garantendo che i deployment non modifichino l'ambiente. Queste pratiche semplificano il ripristino delle modifiche alla configurazione.

Monitora le pipeline CI/CD

Per garantire un'esecuzione ottimale dei processi automatizzati di creazione, test e deployment, monitora le pipeline CI/CD. Imposta avvisi che indicano quando un elemento non funziona in una pipeline. Ogni passaggio della pipeline deve scrivere istruzioni di log appropriate in modo che il team possa eseguire l'analisi delle cause principali in caso di errore della pipeline.

In Google Cloud, tutti i servizi CI/CD sono integrati con l'osservabilità di Google Cloud. Ad esempio:

Per maggiori dettagli su monitoraggio e logging, consulta Configurare il monitoraggio, gli avvisi e il logging.

Esegui il deployment delle applicazioni in sicurezza

Consulta la sezione Esegui il deployment delle applicazioni in modo sicuro della categoria Sicurezza, conformità e privacy del Framework dell'architettura.

Stabilire linee guida per la gestione delle release delle versioni

Per aiutare i tecnici a evitare di commettere errori e consentire la distribuzione del software ad alta velocità, assicurati che le linee guida di gestione per il rilascio di nuove versioni del software siano documentate in modo chiaro.

I tecnici del rilascio controllano il modo in cui il software viene creato e distribuito. Il sistema di release engineering è guidato da quattro pratiche:

  • Modalità self-service. Stabilisci delle linee guida per aiutare gli ingegneri software a evitare errori comuni. Queste linee guida sono generalmente codificate in processi automatizzati.

  • Release frequenti. L'alta velocità aiuta a risolvere i problemi e a risolverli più facilmente. Le release frequenti si basano su test automatici delle unità.

  • Creazioni ermetiche. Garantisci la coerenza con i tuoi strumenti di creazione. Versione dei compilatori di build che utilizzi per creare le versioni adesso rispetto a un mese fa.

  • Applicazione delle norme. Tutte le modifiche richiedono una revisione del codice, preferibilmente con una serie di linee guida e criteri. L'applicazione dei criteri migliora la revisione del codice, la risoluzione dei problemi e il test di una nuova release.

Passaggi successivi