Lavoro in un piccolo gruppo di sviluppatori che collaborano tutti su diversi progetti Zend PHP. Usiamo Mercurial con una collezione di repository upstream, così come Jenkins per test centralizzati e report sulla salute. Vogliamo implementare una libreria condivisa di classi comuni, ma stiamo lottando con la ricerca di un flusso di lavoro che funzioni bene con il nostro ambiente attuale.
Attualmente, ogni progetto contiene una struttura come questa:
- application (project specific code)
- build (temporary files generated by each build)
- library (code used by multiple projects)
- OurLibrary (our company’s shared codebase)
- Zend (external libraries)
- tests (test code specific to this project)
La cartella della libreria è esclusa dai test e quindi abbiamo creato un progetto specifico per eseguire test di unità contro la libreria condivisa. Questa decisione è stata presa principalmente per evitare di distribuire le classi di test per errore, cosa che può essere in gran parte mitigata da una modifica al processo di compilazione automatizzata, ma anche perché ritenevamo che fosse preferibile mantenere la libreria leggera.
Includiamo la libreria in ogni progetto sotto forma di sotto-repository Mercurial. Ciò significa che le modifiche introdotte nella libreria da uno sviluppatore che lavora su ProjectA wil non si propagherà automaticamente a ProjectB (buona) ma non si propagherà anche al progetto di test della libreria (non valido), pertanto Jenkins non ci avviserà automaticamente del codice potenzialmente in la libreria (pessima).
Una situazione ideale sarebbe che gli sviluppatori possono commettere modifiche alla libreria da qualsiasi progetto e che i nostri strumenti automatici eseguiranno quindi i test della libreria più recenti rispetto all'ultimo codice della libreria. Inoltre, questo non dovrebbe comportare un conflitto di versione quando uno sviluppatore tira una nuova versione dei test della libreria.
Esiste una metodologia consolidata per questo tipo di flusso di lavoro, o dovremmo esaminare la strutturazione delle nostre pratiche di lavoro in modo leggermente diverso prima di impegnarci completamente nei sub-reposli?