CI/CD met database
Die tijd is ook voorbij aan het gaan. Het technisch beheer en functioneel beheer wil ik uit handen gaan geven.
Mijn applicatie wordt nu als een APT-pakket vanuit een eigen APT-repository gedistribueerd en de applicatie kan zichzelf daardoor updaten vanuit de browser. Nu zit ik na te denken over wat dit betekent voor de database code.
Voor een ORM is de database te complex. Dus heb ik om te beginnen heb ik een initialisatiescript gemaakt om een kale database aan te maken. En upgrade scripts waarmee een bestaande database naar een volgende versie kan worden gebracht. De scripts maken deel uit van de code en kunnen fijn mee in de Git-repository.
De database is gedocumenteerd. Alle tabellen, kolommen en constraints zijn voorzien van commentaar, en ik kan een SQL-script schrijven dat benodigde documentatie in Markdown genereert.
Wat ik merk is dat ik nog niet een gestroomlijnde opzet heb voor CI/CD. Dat is ook wel logisch, want ik heb er tot nu toe nog geen ervaring mee (nodig) gehad.
Ik heb al wel een bash script dat een database aanmaakt en vult vanuit init SQL-scripts, en dat demo-/testdata genereert. De update SQL-scripts test ik handmatig op de oude versie voordat ik de nieuwe aanmaak. Vanuit de database genereer ik idealiter zelf documentatie in Markdown-notatie. En alle code (incl. SQL en Markdown) is vanuit de IDE benaderbaar.
Het is een lang verhaal geworden, maar ik vraag me nu vooral af wie er hier ervaring heeft met, of kennis van CI/CD.
Hoe zou je bovenstaande beter kunnen inrichten? Zijn er behulpzame tools die ik heb gemist?
test suite. Je kunt niet blindvaren op een CI/CD-pijplijn zonder unit tests, acceptance tests, integration tests en end-to-end tests.
Ik mis vooral een Audit tests: ook wordt de code gescand op bekende kwetsbaarheden.
Integratietests: De GUI tests verlopen nu handmatig vanuit de browser, dan zie ik ook of alle queries werken.
In een later stadium automatiseer ik dat nog met Selenium.
Acceptatietests: verlopen handmatig met een voorgedefineerd testscript bij de klant.
End-to-end tests: wat bedoel je daar precies mee?
Wat voor mij het belangrijkste is; hoe ga je om met wijzigingen in de database structuur?