Security in microservices
BLOG | LEESTIJD: 5 MINUTEN
Ben je als ontwikkelaar op zoek naar Continuous Integration (CI) software om je development afdeling efficiënter te laten werken? Het aanbod is groot en niet alle CI-oplossingen zijn een goede keuze. Vanuit onze DevOps mensen krijgen we regelmatig ervaringen van de veelgebruikte tools, maar ook van nieuwe tools te horen. Kortom, tijd om eens ervaringen te delen.
Continuous Integration oftewel CI is een belangrijke tool om nieuwe software te testen, uit te rollen en te beheren. Veel ontwikkelteams maken er gebruik van, doorgaans in combinatie met Continuous Delivery (CD)-tools. CI-software draait meestal als serveroplossing in de cloud en is geschikt om meerdere developers tegelijk aan hetzelfde project te laten werken. Wat zijn de beste CI-tools van dit moment? Hieronder vind je – in willekeurige volgorde – onze favorieten.
Codeship
Codeship is in 2011 opgericht en werd in 2018 overgenomen door CloudBees, een grote naam op het gebied van CI en CD. CloudBees gebruikt het open source platform Jenkins en biedt, zoals vrijwel elk pakket, zowel een gratis als een betaalde versie. Upgraden naar Codeship Pro wordt interessant wanneer je meer mogelijkheden nodig hebt, zoals bijvoorbeeld native Docker-ondersteuning. Codeship is echt een SAAS (Software as a Service) pakket dat goed samen werkt met Docker. Het heeft hier handige image caching voor en werkt gemakkelijk, maar voor het gebruik van native Docker, meerdere parallelle test pipelines, en andere features die je wellicht wilt, heb je de betaalde versie nodig. Voor een paar tientjes per maand heb je een mooie tool in handen die je gemakkelijk terugverdient door het automatiseren van taken en het voorkomen van fouten. Het is gemaakt om end-to-end je werk eenvoudig en automatisch te kunnen testen en zo snel mogelijk bugs te ontdekken. Ook is er een mooie lijst met ondersteuning van tools zoals Selenium, PhantomJS, CasperJS, Capybara en Cypress. Wanneer je dit ook end-to-end wilt gebruiken zijn meerdere pipelines en Docker dus echt een must. Er zijn een aantal plug-ins, maar de community is nog relatief klein. De komende jaren verwachten wij wel groei, want in de basis werkt de pro versie goed. Voor samenwerking wil je wellicht een aanvullende tool gebruiken, maar hier worden ook mooie programma’s in ondersteund dus dit zien wij niet als dealbreaker.
Jenkins
Jenkins is de meeste bekende CI-tool onder ontwikkelaars. In Nederland zien we veel organisaties die hiermee werken, en ervaring met Jenkins wordt dan ook vaak gevraagd door opdrachtgevers. Het is al jaren beschikbaar, open source en – na een korte leercurve – erg gebruiksvriendelijk. Een aantal andere aanbieders in deze lijst gebruiken Jenkins als basis in hun oplossingen. Jenkins ondersteunt honderden plug-ins, werkt goed samen met de meeste CD-tools en is gebaseerd op Java. De CI-server ondersteunt Unix-systemen, Windows en macOS. Als je – terecht – waarde hecht aan goede documentatie voor alle platformen, is Jenkins een uitstekende keuze. Met Jenkins2 en Jenkins Configuration as Code (JCasC) is ook YAML en native pipeline gekomen. Het is makkelijker geworden om voor gedefinieerde Jenkins configuraties voor verschillende scenario’s te beheersen. Met Jenkins X is Jenkins volledig getransformeerd en cloud native, en optimaal geschikt voor bijvoorbeeld Kubernetes. De tool heeft door zijn populariteit ook een grote community die elkaar helpt en nieuwe ideeën inbrengt. Jenkins X werkt nu nog standaard met GitHub, maar dit kun je eenvoudig wijzigen naar een andere provider als dat je voorkeur heeft. Met Jenkins X en de ontwikkelingen en ondersteuning van Kubernetes is dit zeker geen dinosauriër maar is er een duidelijke toekomst voor Jenkins weggelegd.
GitHubCI
GitHub, dat in 2018 voor 7,5 miljard dollar werd overgenomen door Microsoft, biedt sinds eind 2018 een CI- en CD-oplossing via zijn GitHub Actions-automatiseringsplatform. De CI-tool is gratis voor publieke repositories. Wie zijn repositories liever privé ontwikkelt met meer dan 3 ontwikkelaars, moet betalen voor de tool. Er is integratie met GitHub Package Registry en je kunt de oplossing gebruiken met vrijwel alle bekende programmeertalen. Denk aan Python, Java, PHP en .NET, maar ook Android, iOS en macOS. Sinds de overname door Microsoft kijken er meer en meer teams naar alternatieven.
JetBrains TeamCity
TeamCity is een commerciële CI-tool van het bekende JetBrains. Er is een gratis versie, maar betaalde pakketten bieden meer Build Agents en Build-configuraties. Dat laatste is vooral handig voor grotere ontwikkelteams met meerdere projecten. Voor de kleinere omgevingen kom je met de gratis licentie echter een behoorlijk eind. De belangrijkste limitatie van de gratis versie zit met name in de grens van 3 Agents.
De TeamCity CI-server werkt goed samen met de CD-oplossing, er is een goede integratie met GitHub en een goede set aan documentatie beschikbaar. Het is al tijden een breed inzetbare tool, maar toch is de community relatief klein. Wellicht komt dit deels door de eenvoud in gebruik, maar een sterke community is doorgaans een grote plus. TeamCity is in vergelijking met Jenkins minder ruim in haar integratie met andere tools, maar goed wie heeft er meer plug-ins en dit zegt niets over de kwaliteit van de plug-ins zelf. Belangrijk voordeel is dat TeamCity snel is opgezet en relatief eenvoudig in gebruik is, en er een goede integratie is met GitHub. Voor met name .NET projecten waarbij je binnen grenzen van de gratis licentieversie kunt blijven is TeamCity een goede kandidaat.
Drone CI
De makers zijn erg overtuigd van hun dienst, die ze steevast beter schaalbaar noemen dan Jenkins. De tool ondersteunt Docker-bestanden, kan als SaaS (Software as a Service) of intern draaien, en richt zich vooral op het testen van nieuwe code in vormen als apps. Bovendien kun je gewijzigde code automatisch naar je datacenter doorsturen, wat handig is als de veranderingen snel doorgevoerd moeten worden. Tip: Drone CI heeft de Drone Community Edition, die veel mogelijkheden bevat en gratis is voor opensource-projecten, individuen en kleine bedrijfjes.
GitLab CI
Nee, raak niet in de war met GithubCI. GitLab CI is namelijk een vergelijkbare tool van een heel ander bedrijf met een Nederlandse medeoprichter. GitLab en GitHub bestonden lange tijd naast elkaar, maar nadat GitHub is overgenomen door Microsoft, groeide GitLab en zijn tools snel. Een deel van de ontwikkelaars wil namelijk niet meer met GitHub werken nu het onderdeel is van Microsoft, en vindt GitLab een interessant alternatief. De CI-tool kan zowel SaaS (Software as a Service) als intern draaien, ondersteunt alle platformen die met Go werken en tests voer je uit in het eenvoudige GitLab Runner. Wie al gebruikmaakt van GitLab kan bestaande projecten eenvoudig naar de CI-tool verplaatsen. Het ondersteunt realtime logging, komt out-of-the-box met ondersteuning voor Prometheus. Ook is het compatibel met Docker-images en virtuele machines (VM’s) en GitLab CI is automatisch te schalen om krachtig maar efficiënt te blijven.
Atlassian Bamboo
De Bamboo CI-tool van het bekende Atlassian probeert zich op diverse manieren te onderscheiden van concurrenten als Jenkins. Zo biedt Bamboo naar eigen zeggen een betere schaalbaarheid, wat vooral van pas komt als er meerdere ontwikkelaars werken aan één project. De prestaties moeten dan niet teruglopen, en je ziet eenvoudig welke code er sinds de vorige uitrol gewijzigd is. Bamboo werkt goed samen met andere Atlassian-tools als Bitbucket (een GIT oplossing voorheen bekend stond als “Stash”), Jira (digitaal projectbeheer) en het – minder populaire – HipChat, een chatdienst voor teams. Verrassend genoeg is het nog niet volledig geïntegreerd met Kubernetes. Je kunt applicaties via Amazon Web Services (AWS) draaien en kritieke builds in aparte omgevingen laten werken waar je tevens direct hotfixes in kunt doorvoeren. Tot zo ver prachtig, maar wanneer je denkt “mooi nu kan ik ook de elastic features van Amazon EC2 gebruiken”, komt met de Elastic Bamboo feature op vrij kostbare remote agents uit. Kortom, Bamboo was bijna als CI tool uit ons rijtje gevallen. Vanuit ons perspectief is het voornaamste voordeel wat voor Bamboo spreekt de nauwe integratie met andere Atlassian tools zoals Bitbucket. Van Atlassian zelf blijven we toch fan; hier blijven mooie dingen uit de keuken komen. Veel van de Atlassian tools zijn gratis te proberen, en een paar nieuwe maar wellicht minder bekende tools zijn zeker het testen waard.
Als we kijken naar Bamboo luidt ons oordeel: wil je echt CI/CD ver geautomatiseerd op productie, en automatisch ook in de public cloud kunnen schalen, waarbij je niet direct half aan AWS vast wilt zitten, dan biedt GitLab CI toch ons inziens een beter en kosten efficiënter alternatief. Je betaalt niet per runner en hebt een ruimere keuze qua te gebruiken containertechnologie. Vanuit ons perspectief is het voornaamste voordeel wat voor Bamboo spreekt de nauwe integratie met andere Atlassian tools, zoals Bitbucket. Met het enthousiasme voor Kubernetes, waarbij zelfs VMWorld dit jaar Kubernetes als speerpunt had, verwachten we zeker dat er ook voor Bamboo een plug-in voor volledige integratie Kubernetes komt.
Gitea
Een redelijk nieuwe naam voor de meeste onder ons, maar een mooi open source alternatief voor GitHub. Gitea is op Go gebaseerd en werkt ook goed samen met Docker. Zoals ze zelf zeggen: “Git with a cup of tea”, is wat ons betreft een goede beschrijving. Je zet het gewoon op je eigen server en het zeer snel in gebruik te nemen. Je krijgt veel functionaliteit, zeker wanneer je dit weg zet tegen de minimale hoeveelheid tijd die het kost om als CI-tool in gebruik te nemen. Gitea is ongelooflijk vlot en compleet in de basis. Met Gitolite maak je eenvoudig meerdere projecten aan. Per repository kun je teams rechten geven waarbij je de rechten inregelt met SSH. De Wiki feature is ook een hele handige en de functies die je primair in een goede Git hoopt te vinden; denk aan zaken zoals het maken van een fork, proces rondom commits, afhandelen van pull requests et cetera. Dit werkt allemaal heel intuïtief.
Laat ons weten hoe jouw stack eruit ziet en welke tools jij enthousiast van wordt!