Tutto perfetto, tutto ok, commit solo con test verdi, hudson non rileva problemi da almeno 20 build. Si fa il checkout svn e giu con il build–all. Ma … si inchioda tutto, non riesce a buildare perché dice che gli manca una classe (base). Che cosa sarà mai successo???
Questo è lo scenario che si è creato qualche giorno fa sul progetto sul quale stiamo lavorando. Fortunatamente stiamo ancora in fase di test, quindi nessun problema, ma è stato proprio un fulmine a cel sereno.
Attualmente facciamo commit, solo se tutti i test sono verdi ed abbiamo a disposizione Hudson che svolge il suo lavoro egregiamente … ma perche allora c’e questo errore?
A quanto pare nei precedenti refractoring abbiamo rimosso dal file schema.yml un modello che non era piu utilizzato. Ma, non siamo stati così attenti, da togliere i file che vengono generati automaticamente con la build.
class Article extend BaseArticle
Alcuni file dentro a lib (filter per esempio) estendono ancora dalla classe BaseArticle. Il problema è che finche non si fa un checkout questo problema non si verifica. Questo perchè, sulle macchine che avevano già buildato il modello e che fanno il semlice up, i file non sono stati cancellati, quindi partecipano alla build evitando di mandare in crash la compilazione. Ma nel checkout non esistono … quindi crash.
Hudson allo stesso modo, nei notri task fa l’up, quindi anche lui non se ne accorge.
La nostra colpa è di non aver utilizzato il comando di symfony doctrine:clear che sarebbe andato in errore facendoci scattare qualche campanello d’allarme. Ma il problema, per come la vedo io, è che abbiamo degli strumenti che ci aiutano a tenere sotto controllo questi aspetti e ci aspettiamo che lo facciano. Quindi dalla nostra abbiamo una dimenticanza, ma soprattutto una configurazione errata di Hudson.
Pensandoci un po su, la soluzione non è stata molto complicata:
- Prima di tutto abbiamo creato un nuovo task su hudson. Questa volta invece di fare l’up si fa il checkout.
- Abbiamo introdotto un nuovo comando shell-command (nel task con il checkout) : symfony doctrine:clear
In questo modo, dovremmo essere coperti dai futuri problemi di questo tipo.
Ora, sono relativamente nuovo a questo tipo di tool, mi piacerebbe avere un feedback da qualcuno che ne sa di piu.
Vi è mai capitato un problema del genere? Come avete risolto? La nostra soluzione è corretta?