Ken je dat gevoel? Je opent de pipeline van een collega en treft een YAML-bestand van driehonderd regels aan. Een spatie of tab teveel of te weinig en de build crasht, en om het te debuggen moet je toch weer een commit pushen. Ik heb er zelf te veel tijd aan verloren.
Met NUKE schreef ik mijn buildpijplijn als gewone C# met IntelliSense en breakpoints voor het debuggen. Geen aparte YAML. Gewoon C# code.
NUKE is een open-source build automation framework voor .NET.
Het idee is eenvoudig: je buildpipeline is een gewone C# consoleapplicatie. Targets, afhankelijkheden, parameters alles zit in de code, dus de compiler vangt fouten af tijdens de lokale build. Ook kan je de buildpipeline met NUKE volledig lokaal uitvoeren om de aanpassingen te testen, hierdoor voelt het als normaal programeerwerk!

Een typische setup heeft targets voor Clean, Restore, Compile, Test en Publish. Je geeft per target aan van welke andere targets die afhangt, NUKE bepaalt zelf de volgorde. Wil je Test overslaan? Dan geef je `--skip Test` mee als argument. Wil je debuggen? Zet een breakpoint en stap er gewoon doorheen.
NUKE biedt een breedt aanbod van tools die je normaal ook zou gebruiken, maar ook custom code kan je toevoegen. Zo zou je bijvoorbeeld ook van de custom Bash scripten af kunnen stappen door dit in C# op te lossen.
Een volledig werkend voorbeeld vind je in de officiele NUKE documentatie: https://nuke.build/docs/getting-started/setup/
Het mooie is: je hoeft je buildlogica maar op één plek te schrijven. NUKE kan via `nuke :ci-generate` zelf de platformspecifieke YAML genereren. De YAML-bestanden voor ADO, GitLab en GitHub worden daarmee dunne wrappers die simpelweg je buildscript aanroepen.
Voeg je later een stap toe? Dan pas je alleen Build.cs aan - de YAML hoef je niet aan te raken. Voorbeeldconfiguraties voor alle drie de platforms staan in de documentatie: https://nuke.build/docs/cicd/azure-pipelines/

Wat NUKE voor mij het meest waardevol maakt, is dat je build eindelijk net zoveel aandacht krijgt als de rest van je codebase. Je kunt het testen, reviewen en refactoren. Geen aparte YAML meer waar andere regels gelden.
NUKE vervangt je CI platform niet, dat regelt nog steeds de triggers, de secrets en de omgevingen. Maar de echte logica zit voortaan in je repository, als gewone code.
Het idee van je build schrijven als echte code is niet nieuw en ook niet alleen voor .NET. In andere talen bestaan vergelijkbare tools:
|
Framework |
Taal |
Kernidee |
|
Gradle |
Java / Kotlin / Groovy |
De facto standaard in de JVM-wereld; krachtige DSL, uitstekend voor Android- en Spring-projecten. |
|
Bazel |
Polyglot (Java, Go, C++…) |
Ontwikkeld door Google; gericht op herhaalbaarheid en schaalbaarheid in monorepo's. |
|
Pants |
Python (polyglot) |
Gericht op grote Python- en Java-codebases met snelle, incrementele builds. |
|
Rake |
Ruby |
Ruby's antwoord op Make; taken gedefinieerd in Ruby-code, breed ingezet in het Rails-ecosysteem. |
Dit lijstje heb ik via ChatGpt gemaakt, omdat mijn kennis van deze talen minimaal is, maar ik toch de opties wil laten zien.
