Raccomandazioni per l'uso dell'integrazione continua

Si applica a questa raccomandazione per l'eccellenza operativa di Azure Well-Architected Framework:

OE:04 Ottimizzare i processi di sviluppo e controllo della qualità del software seguendo le procedure comprovate del settore per lo sviluppo e i test. Per una designazione chiara dei ruoli, standardizzare le procedure tra componenti quali strumenti, controllo del codice sorgente, modelli di progettazione dell'applicazione, documentazione e guide di stile.

Guida correlata: Migliorare la velocità di compilazione | Standardizzare strumenti e processi

A mano a mano che il codice viene sviluppato, aggiornato o anche rimosso, avere a disposizione un metodo intuitivo e sicuro per integrare queste modifiche nel ramo di codice principale consente agli sviluppatori di fornire valore.

Gli sviluppatori possono apportare piccole modifiche al codice, eseguire il push di queste modifiche in un repository di codice e ottenere feedback quasi istantaneo sulla qualità, sulla copertura dei test e sui bug introdotti. Questo processo consente di lavorare più velocemente e con maggiore attendibilità e meno rischi.

L'integrazione continua (CI) è una procedura in cui i sistemi di controllo del codice sorgente e le pipeline di distribuzione software sono integrati per fornire meccanismi automatizzati di compilazione, test e feedback per i team di sviluppo software.

Strategie di progettazione chiave

L'integrazione continua è una pratica di sviluppo software usata da sviluppatori per integrare gli aggiornamenti software in un sistema di controllo del codice sorgente a cadenza regolare.

Il processo di integrazione continua inizia quando un tecnico crea una richiesta pull di GitHub per segnalare al sistema CI che le modifiche al codice sono pronte per l'integrazione. Idealmente, il processo di integrazione convalida il codice in base a diverse baseline e test. Fornisce quindi commenti e suggerimenti al tecnico richiedente sullo stato di questi test.

Se i controlli di base e i test vanno bene, il processo di integrazione produce e fasi asset che distribuiranno il software aggiornato. Questi asset includono codice compilato e immagini del contenitore.

L'integrazione continua consente di distribuire più rapidamente software di alta qualità eseguendo le azioni seguenti:

  • Eseguire test automatizzati sul codice per fornire il rilevamento anticipato delle modifiche di rilievo.
  • Eseguire l'analisi del codice per garantire standard, qualità e configurazione del codice.
  • Eseguire controlli di conformità e sicurezza per assicurarsi che il software non abbia vulnerabilità note.
  • Eseguire test di accettazione o funzionali per assicurarsi che il software funzioni come previsto.
  • Fornire un feedback rapido sui problemi rilevati.
  • Laddove applicabile, produrre asset distribuibili o pacchetti che includono il codice aggiornato.

Automatizzare l'integrazione continua con le pipeline

Per ottenere l'integrazione continua, usare soluzioni software per gestire, integrare e automatizzare il processo. Una pratica comune consiste nell'usare una pipeline di integrazione continua.

Una pipeline di integrazione continua prevede un componente software (spesso ospitato nel cloud) che fornisce:

  • Piattaforma per l'esecuzione di test automatizzati.
  • Analisi di conformità.
  • Creazione di report.
  • Tutti gli altri componenti che costituiscono il processo di integrazione continua.

Nella maggior parte dei casi, il software della pipeline viene collegato al controllo del codice sorgente in modo che quando vengono create richieste pull o che il software venga unito in un ramo specifico, viene eseguita la pipeline di integrazione continua. L'integrazione del controllo del codice sorgente offre anche l'opportunità di fornire feedback CI direttamente sulle richieste pull.

Molte soluzioni, ad esempio Azure Pipelines o GitHub Actions, offrono le funzionalità delle pipeline di integrazione continua.

Integrare pipeline con il controllo del codice sorgente

L'integrazione della pipeline di integrazione continua con il sistema di controllo del codice sorgente è fondamentale per consentire contributi di codice self-service rapidi.

La pipeline di integrazione continua viene eseguita in una richiesta pull appena creata. La pipeline include tutti i test, le valutazioni della sicurezza e altri controlli. I risultati dei test CI vengono visualizzati direttamente nella richiesta pull per consentire un feedback quasi in tempo reale sulla qualità.

Un'altra pratica comune consiste nel creare report o badge di piccole dimensioni che possono essere presentati nel controllo del codice sorgente per rendere visibili gli stati di compilazione correnti.

L'immagine seguente illustra l'integrazione tra GitHub e una pipeline di Azure DevOps. In questo esempio la creazione di una richiesta pull attiva una pipeline di Azure DevOps. Lo stato della pipeline viene visualizzato nella richiesta pull.

Screenshot di una notifica di stato di Azure DevOps in un repository GitHub.

Incorporare test automatizzati

Un elemento chiave dell'integrazione continua è la compilazione e il test continui del codice man mano che gli sviluppatori apportano contributi al codice. Il test delle richieste pull durante la creazione offre un feedback rapido che il commit non ha introdotto modifiche di rilievo. Il vantaggio è che i test nella pipeline di integrazione continua possono essere gli stessi test eseguiti durante lo sviluppo basato su test.

Il frammento di codice seguente mostra un passaggio di test da una pipeline di Azure DevOps. Il passaggio ha due attività:

  • La prima attività usa un framework di test Python diffuso per eseguire test CI. Questi test risiedono nel controllo del codice sorgente assieme al codice Python. I risultati del test passano a un file denominato test-results.xml.
  • La seconda attività usa i risultati del test e li pubblica nella pipeline di Azure DevOps come report integrato.
- script: |
    pip3 install pytest
    pytest azure-vote/azure-vote/tests/ --junitxml=junit/test-results.xml
    continueOnError: true

- task: PublishTestResults@2
    displayName: 'Publish Test Results'
    inputs:
    testResultsFormat: 'JUnit'
    testResultsFiles: '**/test-results.xml'
    failTaskOnFailedTests: true
    testRunTitle: 'Python $(python.version)'

L'immagine seguente mostra i risultati dei test visualizzati nel portale di Azure DevOps.

Screenshot dei test della pipeline di Azure DevOps nel portale di Azure DevOps.

Test non superati

I test non riusciti devono bloccare temporaneamente una distribuzione e condurre a un'analisi più approfondita di ciò che è successo. I test non superati devono anche portare a un perfezionamento dei test o a un miglioramento della modifica che ha causato l'esito negativo dei test.

Stato di pubblicazione della compilazione

Molti sviluppatori mostrano che la qualità del codice è elevata visualizzando una notifica di stato nel repository. L'immagine seguente mostra una notifica di Azure Pipelines visualizzata nel file leggimi per un progetto open source in GitHub.

Screenshot di una notifica di Azure Pipelines in un file leggimi in GitHub.

Facilitazione di Azure

Azure DevOps è una raccolta di servizi che consentono di creare una pratica di sviluppo collaborativa, efficiente e coerente.

Azure Pipelines offre servizi di compilazione e rilascio per supportare l'integrazione continua e il recapito continuo (CI/CD) delle applicazioni.

GitHub for Actions per Azure consente l'automazione dei processi CI/CD. Si integra direttamente con Azure per semplificare le distribuzioni. È possibile creare flussi di lavoro che compilano e testano ogni richiesta pull nel repository o che distribuiscono le richieste pull unite nell'ambiente di produzione.

Informazioni su come creare una pipeline di integrazione continua usando GitHub o Azure DevOps:

Informazioni su come visualizzare le notifiche nei repository:

Elenco di controllo per l'eccellenza operativa