HomeBlogfdtrck- Fase 4: Continuous Deployment
App developer worked on fdtrck app
#Innovatie #Proces
Stijn Mommersteeg - DeveloperStijn Mommersteeg
9 november 2021

fdtrck- Fase 4: Continuous Deployment

Met de release van Flutter 2, is het mogelijk geworden om apps gebouwd met het framework voor elk platform te gebruiken. Flutter was al onze go-to technologie om razendsnel solide apps te ontwikkelen voor zowel iOS als Android, zonder dat we daarvoor de app dubbel moesten ontwikkelen. Door Flutter 2 is het nu mogelijk om de app op iOS, Android, Windows, MacOS, Linux, web browsers, auto’s en TV’s te gebruiken vanuit één code base. Ten minste, dat is wat ons is beloofd. Daarom hebben we besloten om Flutter 2 eens aan de tand te voelen en een cross-platform prototype te bouwen. In deze laatste blog over fdtrck vertellen we hoe we de app doorlopend kunnen publiceren.

Het is geen geheim dat developers ervan houden om dingen te automatiseren. Waarom dingen handmatig doen als een computer ook het werk voor je kan doen? Dit klinkt misschien nogal lui en dat is in alle eerlijkheid wel een beetje waar (meer tijd om te spelen met de honden op kantoor, toch?). Maar we willen ook graag focussen op de andere voordelen van automatisering, waaronder security, stabiliteit en snelheid.

Van backlog naar productie

Hoe belandt een nieuwe feature in een productie app? Hiervoor volgen we altijd min of meer hetzelfde proces (er zijn hier en daar wat keuzes te maken afhankelijk van het specifieke project). Ten eerste is onze onze code version controlled. Dit betekent dat we meerdere verschillende versies van de code base (ook wel commits genoemd, gestructureerd in branches) kunnen creëren, vergelijken en samenvoegen. In het geval dat we een foutje maken, kunnen we een eerdere versie terugrollen. Eén van deze versies is de huidige productie versie. Alle versies worden bewaard in de repository.

Code automation

Integratie

Stel, een developer pakt een ticket van de backlog (dit is dev-taal voor het oppakken van een taak op de todo lijst). De developer maakt een kopie van de code en gaat hiermee aan de slag. Welke aanpassing ze ook maken, de nieuwe code moet geïntegreerd worden met de bestaande code. Dit betekent dat we er zeker van moeten kunnen zijn dat de code nog steeds werkt wanneer we deze samenvoegen. Het doel van de integratie is om nieuwe versies van de code te leveren aan de repository. Soms hebben we een paar pogingen nodig om een nieuwe feature te perfectioneren. Als de code gebouwd is en alle testen geslaagd zijn, kunnen we de nieuwe aanpassingen samenvoegen. 

Deployment

We nemen één of meerdere geïntegreerde veranderingen en voegen deze samen tot de totaalversie die we willen publiceren. Daarbij zijn er ook belangrijke QA processen die we nu niet zullen bespreken. Eerst testen we of alles nog werkt zoals het in de final versie zou moeten werken. Dan moet de code klaargemaakt worden voor deployment. Voor fdtrck betekent dit dat we een production build moeten maken voor elk platform waarop we willen publiceren. Deze builds worden vervolgens naar de production environments gestuurd (de app stores en de web server). 

Er zijn verschillende deployment environments:

  • Development: alleen voor internal testing. Deze environment werkt vaker niet dan wel. Soms hebben we meerdere van deze environments. 
  • Staging: hier testen we of de stabiele versies ook daadwerkelijk stabiel zijn. Het is gebruikelijk dat hier de aanpassingen worden geaccepteerd door onze klanten of door een product owner. 
  • Production: dit is de real deal. Hier kunnen de users inloggen, worden App Store reviews geschreven en wordt gevoelige data verwerkt. 

Job Guldemeester

Van handmatig naar continu

Natuurlijk kunnen de integratie en deployments handmatig worden gedaan, en soms heeft dit handmatig ingrijpen nodig. Maar zou het niet cool zijn om te automatiseren? Ja, dat zou zeker cool zijn. Dit is niet iets wat we zelf hebben bedacht: automatische integratie en deploys worden veel gebruikt en zijn beter bekend onder Continuous Integration en Continuous Deployment (CI/CD). CI/CD probeert het handmatige werk rondom integratie en deploying tot een minimum te beperken. 

Hier een aantal voorbeelden waarom CI/CD zo cool is:

  • Snelheid: Dit is een no-brainer. Een scripted deploy is simpelweg sneller dan een developer. Ook kun je vaker deployen, dus is het niet meer nodig om een hoop te saven voor een enkele deploy-day. 
  • Stabiliteit: Computers winnen van mensen als het gaat om het herhaaldelijk en consistent uitvoeren van exact dezelfde taken. Mensen, vooral aan het einde van de werkdag, kunnen nog wel eens een stap te vergeten of iets door elkaar te halen. Ook starten computers iedere keer met een schone omgeving waardoor er geen problemen ontstaan met eerdere versies.
  • Security: Als het meeste werk is geautomatiseerd, zorgt dit ervoor dat er minder devops engineers toegang hoeven te hebben tot de productie environment, wat weer zorgt voor extra beveiliging. Ook is het mogelijk om iedere deploy te checken op mogelijke beveiligingsrisico’s in de packages die we gebruiken.

Continuous deployment

CI/CD in fdtrck

Voor fdtrck hebben we gebruik gemaakt van belangrijke systemen voor de CI/CD pipelines. De eerste is Gitlab (een nieuwe Nederlandse unicorn), waarin we onze code managen en de QA doen. Voor de geautomatiseerde deploys, werken we met Bitrise. Voor andere projecten werken we ook met Gitlab voor de deploys, maar voor apps is er een Apple computer nodig om iOS versies te bouwen. Dit is iets wat Bitrise perfect voor ons oplost. 

Bitrise is ideaal om mee te werken wanneer je wat werk uit handen wil hebben. Een andere dienstverlener die de servers voor je up-to-date houdt. Bitrise maakt het makkelijk om mee te werken door middel van een stappenplan wat je zelf kan maken en wijzigen. Kopieer eerst de code, bouw deze op en upload deze naar de App Store en Playstore. Als je kennis over CI/CD beperkt is, zal Bitrise hoogstwaarschijnlijk een goede match zijn. Bitrise beheert je sleutels om te ondertekenen, zodat je ze niet apart hoeft op te slaan. Je kan ervoor zorgen dat ze worden gedownload van een beveiligde server en naar je map worden gekopieerd, en vervolgens doorgaan om Bitrise jou builds voor je te laten ondertekenen. Door teamrollen te verdelen resulteert dit uiteindelijk in een betere beveiliging, je kunt namelijk instellen wie toegang heeft tot verschillende apps. Door middel van workflows is het gemakkelijk om fouten te vinden en op te lossen voordat ze naar de App Store en Play Store worden gepusht. Bitrise neemt je werk uit handen, efficiënt en noob vriendelijk.

Samenvattend

Vooral wanneer we werken aan een code met meerdere developers, kan de integratie van een nieuwe code zorgen voor veel extra werk. Door te werken met geautomatiseerde integratie en deployment scripts, die een overdaad aan automatische tests bevatten, kunnen we snel leveren, zijn we betrouwbaar en veilig. CI/CD is zo goed, dat we het zelfs aandurven om te deployen op vrijdagen.

Dit vind je misschien ook interessant:

Laat je project niet stranden omdat een goede strategie ontbreekt. Kijk of jouw idee klaar is voor ontwikkeling met onze Digital Readiness Scan. Binnen 5 vragen weet je wat je volgende stap naar succes is.

Naar de scan