Fedora CI
Fedora Continuous Integration Portal
Perché
Visione
Ci sono centinaia di pacchetti che costituiscono il Sistema Operativo. Assicurarsi che funzionino tutti insieme come un tutt’uno non è un compito facile. Questo diventa ancora più difficile con l’aumento del numero di pacchetti e delle loro interdipendenze. È necessario un testing estensivo prima che una nuova versione del sistema operativo venga rilasciata, per garantire che sia sufficientemente stabile. Questo è il passato.
Immagina un Sistema Operativo Sempre Pronto costituito da pacchetti che sono costantemente mantenuti in buono stato. Integrato e stabile grazie a un’ampia copertura di test che viene eseguita continuamente in seguito a modifiche nei singoli pacchetti, consentendo in questo modo di preparare una nuova versione in un tempo molto più breve, o addirittura in tempo zero.
Immagina una distribuzione di un sistema operativo che potresti rilasciare in qualsiasi momento. È verso questa direzione che ci stiamo dirigendo. Ecco che arriva la CI, Integrazione Continua, come uno strumento inestimabile per garantire che tutto funzioni insieme come previsto in ogni momento.
Manifesto
L’integrazione continua mira a garantire che le modifiche errate vengano rilevate il prima possibile e non influenzino altri sviluppatori, packager, maintainer o utenti. Il feedback fornito dall’integrazione continua è vitale per una consegna agile e rapida del software. Il testing tardivo, molto tempo dopo che una modifica è avvenuta, non si adatta al ritmo di Fedora. Impara gli obiettivi, la terminologia e le regole per una CI funzionante nel manifesto.
Come
Ci sono tre elementi principali del puzzle per far funzionare bene questo sistema: un processo che definisca chiaramente come scoprire ed eseguire i test, una serie di strumenti che aiutino a implementare in modo efficiente il processo e i test stessi.
Processo
Abilitazione dei Test
Tests can be enabled using the Test Metadata Specification implemented by the Test Management Tool which provides a number of features to efficiently work with tests.
Gating
Quando un test fallisce, la CI può impedire che la modifica difettosa influisca su altri pacchetti. Tale gating avviene in Bodhi. Greenwave viene utilizzato insieme a ResultsDB e WaiverDB per prendere la decisione di gating.
Notifiche
Le Notifiche Fedora sono state regolate per notificare per impostazione predefinita ogni packager quando un qualsiasi passaggio della pipeline CI fallisce su uno dei pacchetti che mantiene. Quindi se sei un maintainer del kernel e un commit effettuato nel repository dist-git del kernel fallisce nel comporre un OSTree, FMN ti notificherà di ciò.
Bodhi include i risultati della CI nella sua pagina di aggiornamento, proprio come include già i risultati dei test da taskotron.
Messaggi
Vari strumenti coinvolti nell’automazione della CI inviano aggiornamenti sull’andamento del testing al message bus. Il formato coerente dei messaggi della CI consente di costruire servizi più semplici che forniranno funzionalità utili per tutti.
-
Fedora CI Messages … CI messages specification
-
Datagrepper … search sent messages (e.g. by topic)
-
bus fedmsg … messaggi inviati dalla pipeline
-
argomenti … elenco degli argomenti fedmsg relativi alla CI
Tool
Test Management Tool
Lo strumento tmt fornisce un modo semplice per lavorare con i test. Puoi comodamente creare nuovi test, eseguire test in modo sicuro e facile attraverso diversi ambienti, rivedere i risultati dei test, eseguire il debug del codice di test e abilitare i test nella CI utilizzando una configurazione coerente e concisa.
Frameworks
As tmt does not define test framework which should be used for testing it is possible to choose the most suitable framework for your project. Here are some examples:
Jenkins pipelines
The Jenkins testing pipelines run generic tests for Bodhi updates in Testing Farm, and gather and report the results.
Packit as dist-git CI
Packit acts as CI for dist-git pull requests. Test results are displayed in the dist-git web interface. See Packit as Fedora CI for more details.
Test
Il nucleo del successo della CI sono test affidabili di buona qualità, ben selezionati, stabili, organizzati e mantenuti continuamente.
Tipi di test
In generale ha senso archiviare i test il più vicino possibile all’upstream. Quindi quali sono i tipi di test appropriati raccomandati per testare il Sistema Operativo Sempre Pronto?
-
Test di funzionalità di base
-
Test di integrazione
Per i test unitari di solito ha più senso archiviarli direttamente all’interno del repository del progetto upstream. Tuttavia, in alcuni casi potrebbe valere la pena recuperare i test per la CI di Fedora anche dal repository upstream.
Codice di Test
Il codice di test può essere memorizzato direttamente nel dist-git o recuperato da un altro repository. La configurazione minima per abilitare un semplice smoke test è la seguente:
execute:
script: foo --version
I test da un repository condiviso possono essere abilitati in questo modo:
discover:
how: fmf
url: https://src.fedoraproject.org/tests/shell
execute:
how: tmt
Vedi la documentazione dello Test Management Tool per ulteriori dettagli ed esempi.
Esecuzione dei Test
Eseguire i test è semplice come eseguire un singolo comando:
tmt run
Scopri di più nella sezione Esecuzione dei Test.
Responsabilità Condivisa
The ownership and maintenance of tests should be shared between Quality / CI teams and maintainers. For tests that reside in the rpm namespace, Quality / CI can use pull requests to create/update tests. Likewise in the tests namespace, both Quality / CI and maintainers should have commit rights and review changes.
Altro
Contatto
Se hai domande o desideri partecipare:
-
Matrix: #fedora-ci room
-
Discussione: tag #fedora-ciBy the way, to unlock the full functionality of all Apps, enable Gemini Apps Activity
-
Tickets: General CI Issues
Link
Ecco alcuni collegamenti aggiuntivi correlati:
-
Test Management Tool … Documentazione Fedora CI per tmt
-
Guida tmt … guida upstream per tmt
-
SIG CI … Gruppo di Interesse Speciale per l’Integrazione Continua
Want to help? Learn how to contribute to Fedora Docs ›