Toolchain
Mit einer Toolchain (englisch für Werkzeugkette) werden Prozesse in der Softwareentwicklung automatisiert, indem mehrere Softwareanwendungen (Tools) miteinander verknüpft werden. Das Ziel ist es jeweils für einzelne Aufgaben spezialisierte Tools zu benutzen. Durch die automatisierten Prozesse wird die Fehleranfälligkeit reduziert und die Qualität und Effizienz erhöht. Je nach Anwendungsfall bestehen Toolchains aus unterschiedlichen Tools. Die Grundsätze sind aber immer die gleichen, egal ob eine Toolchain für Continuous Integration, Continuous Delivery oder DevOps benutzt wird.
Vor- und Nachteile Automatisierter Prozesse
Automatisierte Prozesse haben zwei Vorteile. Erstens werden durch weniger manuelle Arbeitsschritte Fehlerquellen minimiert. Zweitens steigt die Effizienz, da sobald ein Prozess automatisiert ist, keine Arbeitszeit mehr für ihn benötigt wird. Das führt uns auch schon zum Nachteil der Automatisierung: das Setup kann sehr aufwändig sein. Deswegen ist es wichtig nicht grundsätzlich alles automatisieren zu wollen, sondern abzuwägen und zu priorisieren welche Schritte sich zum Automatisieren eignen.
Continuous Delivery Toolchain
Oft werden Toolchains zum Umsetzen von Continuous Integration- oder Continuous Delivery-Prozessen aufgebaut, indem Tools wie diese benutzt werden:
- Source Code Management: Ein Tool zum Verwalten von Source Code in Repositories.
- Build Server: Ein Tool zum Durchführen von Builds. Der Build Server ist in der Regel die zentrale Komponente einer Toolchain. Er holt Daten aus z.B. dem SCM-Tool um den Build durchzuführen und leitet anschließende Schritte wie das Deployment oder funktionale Tests ein.
- Artefakt Repository: Ein Tool zum Speichern von binären Artefakten. Das können Releases des Produkts, Bibliotheken oder Softwarekomponenten sein.
- Issue Tracking und Projekt Management: Tools zum Verwalten von Issue Tickets und zum Projektmanagement.
- Knowledge Management: Tools zum Verwalten von Informationen und Wissen, zum Beispiel in Form eines Wikis.
- Testautomatisierung: Tools und Frameworks zum automatischen Testen von Änderungen.
- Server Konfiguration und Monitoring: Tools zum automatischen Deployment von Releases und zum Monitoring des Betriebs.
Für alle diese Kategorien gibt es eine große Auswahl an Tools, die alle ihre ganz eigenen Vor- und Nachteile haben.
Beispiel einer Toolchain
Das Cloudogu EcoSystem ist eine Plattform, auf der Tools für die Softwareentwicklung betrieben werden. Es gibt viele integrierte Tools die im Setup ausgewählt werden können.
Mit diesen Tools kann der gesamte Lebenszyklus der Softwareentwicklung abgedeckt werden:
- Source Code Management: SCM-Manager (Verwaltung von Git, SVN und Mercurial Repositories.)
- Build Server und Deployment: Jenkins
- Testautomatisierung: SonarQube
- Artefakt Repository: Nexus Repository
- Issue Tracking und Projekt Management: Redmine oder JIRA
- Knowledge Management: Smeagol oder Confluence
- Anwendungsverwaltung: Portainer
Diese Tools bilden bereits eine professionelle Toolchain, die einfach erweiterbar ist.
Neben der bloßen Bereitstellung der Tools bietet das Cloudogu EcoSystem außerdem noch den Vorteil von geringem Administrationsaufwand für die Installation und den fortlaufenden Betrieb. Details dazu finden Sie in diesem Blog Post.