Die Build-Tools für CI/CD, also für die Umsetzung einer Continuous Integration/Delivery/Deployment-Strategie haben sich in den letzten Jahren als gesetzte Produkte etabliert. Heutzutage haben Software-Projekte keinen konzeptuellen Aufwand mehr, eine komplette Build-Chain aufzusetzen. Es geht eigentlich “nur” noch um die gewünschte Ausprägung und eine Evaluierung der geeigneten Produkte.
Die Werkzeuge
In einer klassisch aufgesetzten Build-Chain werden für die unterschiedlichen Aufgaben unterschiedliche Systeme eingesetzt:
- Das Source Code Management System (SCM) enthält alle Sourcen des Software-Projekts. Also natürlich die eigentlichen Quellcodes, Konfigurationsdateien und weitere Ressourcen. Daneben enthält es aber auch noch die Definition des Build-Prozesses.
- Ein Build-Tool erzeugt aus den Quellcodes die gebaute Anwendung bzw. “Artefakte”. Dabei werden Abhängigkeiten, auch transitiv, zu anderen Artefakten aufgelöst.
- Die Entwickler-Rechner haben Zugriff auf das SCM und legen darin ihre Quellen ab. Zusätzlich ist das Build-Tool installiert, so dass ein Build-Prozess lokal ausgeführt werden kann.
- Eine Build-Maschine holt sich vom SCM die Quellcodes sowie den Build-Prozess und baut daraus die Anwendung.
- Das Artefakt-Repository hält alle Artefakte in einer hierarchischen Ablage inklusive Versionsnummer vor. Artefakte werden vom Build-Tool stets vom Artefakt-Repository geladen. Aber auch alle nachrangigen Prozesse, also beispielsweise Anwendertests oder die Produktionsplattform bedienen sich des Artefakt-Repositories.
Als konkrete Produkte seien hier erwähnt:
- GIT in Kombination mit einem Git-Server wir GitHub. GitLab oder BitBucket als SCM,
- Als Build-Werkzeug z.B. im Java-Umfeld Apache Maven oder Gradle. Für Web-Anwendungen ist npm sicherlich immer eine sinnvolle Möglichkeit.
- Als Build-Maschine ist Jenkins in vielen Unternehmen gesetzt.
- Nexus und Artifactory sind gebräuchliche Repository Manager.
Selbstverständlich stellen diese Produkte nur eine subjektive Auswahl dar.
Gesamtbild
Das folgende Gesamtbild veranschaulicht das Zusammenspiel der Komponenten: