Raccomandazioni per l'uso dell'integrazione continua

Si applica a questo elenco di controllo di Eccellenza operativa di Azure Well-Architected Framework:

OE:04 Ottimizzare i processi di sviluppo software e di garanzia della qualità seguendo le procedure comprovate del settore per lo sviluppo e i test. Per una designazione chiara del ruolo, standardizzare le procedure tra i componenti, ad esempio 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

Poiché il codice viene sviluppato, aggiornato o rimosso, avere un metodo intuitivo e sicuro per integrare queste modifiche nel ramo di codice principale consente agli sviluppatori di fornire valore.

Come sviluppatore, è possibile apportare modifiche di codice di piccole dimensioni, eseguire il push di queste modifiche a un repository di codice e ottenere commenti e suggerimenti quasi istantanei sulla qualità, la copertura dei test e i bug introdotti. Questo processo consente di lavorare più velocemente e con maggiore fiducia 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 che gli sviluppatori usano per integrare gli aggiornamenti software in un sistema di controllo del codice sorgente in una frequenza regolare.

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

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

L'integrazione continua consente di offrire software di alta qualità più rapidamente 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 commenti rapidi sui problemi rilevati.
  • Laddove applicabile, produrre asset distribuibili o pacchetti che includono il codice aggiornato.

Pipeline di integrazione continua

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

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

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

Nella maggior parte dei casi, il software della pipeline è collegato al controllo del codice sorgente, in modo che quando le richieste pull vengano create o software vengano unite in un ramo specifico, viene eseguita la pipeline di integrazione continua. L'integrazione del controllo del codice sorgente offre anche l'opportunità di fornire commenti e suggerimenti ci direttamente sulle richieste pull.

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

Integrazione del 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 veloci e veloci.

La pipeline CI viene eseguita in una richiesta pull appena creata. La pipeline include tutti i test, le valutazioni di 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 sta creando piccoli report o badge 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 un badge di stato di Azure DevOps in un repository GitHub.

Integrazione dei test

Un elemento chiave dell'integrazione continua è la creazione continua e il test del codice come gli sviluppatori apportano contributi al codice. Il test delle richieste pull durante la creazione fornisce 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 guidato dal 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 popolare 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 portare a un'analisi più approfondita di ciò che è successo. I test non riusciti devono anche causare un miglioramento dei test o un miglioramento della modifica che ha causato l'esito negativo dei test.

Badge dei risultati CI

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

Screenshot di un badge di Azure Pipelines in un file readme 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 la distribuzione continua (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 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 i badge nei repository:

Elenco di controllo Di eccellenza operativa