1. Änderungen am Code vornehmen
Wie ich schon vorher gesagt habe, geht Softwareentwicklung im Wesentlichen darum, kleine Änderungen am Code vorzunehmen. Millionen von Programmierern machen das seit Jahrzehnten, was dazu geführt hat, dass dieser Prozess gründlich getestet, standardisiert und auf verschiedenste Weisen formalisiert wurde.
Zum Speichern des Codes gibt es spezielle Programme – Git. Git ist ein verteiltes Version Control System. Es speichert nicht nur den Code, sondern verfolgt alle Änderungen daran und hilft Programmierern, gemeinsam an Projekten zu arbeiten, ohne sich gegenseitig zu stören 🤝.
Mit Git können Entwickler verschiedene Versionen des Projekts erstellen (Branches), die komplette Änderungshistorie speichern und sogar zu einem beliebigen Punkt in der Vergangenheit zurückkehren. Das ist wie eine Zeitmaschine für den Code! Git hilft auch beim Zusammenführen von Änderungen und beim Auflösen von Konflikten, weshalb es das wichtigste Tool für Teamarbeit in der modernen Softwareentwicklung ist. 👩💻
2. Projekt bauen
Bevor man das Projekt testen oder auf den Server hochladen kann, muss man es bauen.
🏗️ Build-Prozesse – das ist der Vorgang, bei dem der Quellcode des Projekts in ausführbare Programme oder andere Startformate kompiliert wird, oft inklusive Tests und Deployment. Das ist ein zentraler Schritt in der Softwareentwicklung, der sicherstellt, dass das Programm einsatzbereit ist.
Build ist nicht nur einfach Kompilieren, obwohl das oft Teil des Prozesses ist. Nach dem Build können hunderte von Dateien entstehen, die auf verschiedene Server hochgeladen werden müssen.
Build-Tools können sein:
- ☕ Maven und Gradle – sehr beliebt bei Java-Projekten für Dependency-Management und Build-Prozesse.
- 🐜 Apache Ant – ein weiteres Tool für Java-Builds, das viel Flexibilität beim Schreiben von Build-Skripten bietet.
- 🖥️ MSBuild – für das Bauen von Projekten, die mit Microsoft Visual Studio erstellt wurden.
- ⚙️ Make – ein klassisches Build-Tool, das Makefile benutzt, vor allem bei C- und C++-Projekten.
- 🌐 Webpack – häufig für das Bauen von JavaScript-Apps, verwaltet Dependencies und Module.
- 📜 Gulp und Grunt – Tools, die bei Web-Entwicklung oft wiederkehrende Aufgaben automatisieren, z.B. Minifizierung oder SCSS zu CSS kompilieren.
Es gibt auch High-Level-Build-Tools. Dazu gleich mehr.
3. CI/CD
🔄 CI/CD (Continuous Integration/Continuous Delivery) – eine Methodik, bei der Änderungen aus allen Entwicklungs-Branches kontinuierlich in den Main-Branch integriert, automatisch getestet und deployed werden. Das hilft, Fehler schnell zu finden und zu beheben, und macht die Entwicklung effizienter und schneller.
Eine der bekanntesten, wenn auch etwas veralteten, CI/CD-Systeme ist Jenkins. Wenn du in einer kleinen Firma arbeitest, hast du mit 80% Wahrscheinlichkeit mit Jenkins zu tun.
🤖 Jenkins – eine beliebte Automatisierungsplattform für CI/CD. Jenkins automatisiert Build, Test und Deployment, verbessert die Codequalität und beschleunigt die Entwicklung.
In größeren Firmen gibt es oft noch mehr Alternativen:
- 🚦 TeamCity – eine leistungsstarke kommerzielle Lösung von JetBrains, integriert sich gut in verschiedene Entwicklungs- und Testumgebungen.
- 📝 GitLab CI – Teil von GitLab, bietet CI/CD mit YAML-Konfiguration.
- ☁️ CircleCI – Cloud-basierter Service für CI/CD, automatisiert Tests und Deployments für viele Projekte.
- 🦑 Travis CI – einer der ersten Cloud-CI-Dienste, sehr beliebt bei Open-Source-Projekten, gut mit GitHub integriert.
- 🎍 Bamboo – von Atlassian, arbeitet eng mit Jira und Bitbucket zusammen.
Du musst diese Tools nicht alle kennen oder bedienen – meistens gibt es DevOps-Experten, die das alles einrichten. Wichtig ist nur, dass du weißt, dass sie existieren, und im Gespräch verstehst, worum es geht, wenn von Jenkins, CI/CD oder „Continuous Integration“ die Rede ist.
4. Projekt auf den Server bringen
Ein Projekt nur zu schreiben reicht nicht – es muss auch auf den Server kommen. Deployment (deployer, deploy) bedeutet, das Web-Application auf dem Server zu platzieren und zu aktivieren, damit Nutzer sie über das Internet erreichen können 🚚.
Dazu gehört, die Projektdateien auf den Server zu kopieren, die Server-Umgebung, Datenbanken, Dependencies einzurichten sowie Netzwerkeinstellungen und Sicherheit zu konfigurieren 😅.
Denkst du, dein Code landet auf dem Server? Wird jemand ihn hochladen? Oder connectest du dich per SSH, lädst ein paar Dateien hoch und richtest alles ein? Keine Sorge: so macht das heute kaum noch jemand. Jetzt gibt’s Docker.
🐳 Docker – eine Plattform für Entwicklung, Lieferung und Betrieb von Anwendungen mit Containern. Docker vereinfacht das Erstellen, Deployen und Ausführen von Apps, indem es sie zusammen mit allen Dependencies und Umgebungen in einem einzigen, kompakten Container verpackt. Das sorgt für Konsistenz in der Umgebung – von Entwicklung bis Produktion.
Mit Docker kannst du dein Projekt oder mehrere Projekte in Docker-Container packen. Das ist so ähnlich wie eine virtuelle Maschine.
Auch wenn auf Foren oft gesagt wird, Docker sei eine „virtuelle Maschine“, kannst du es auch so sehen: Es ist eine sehr leichte virtuelle Maschine, nur eben viel schlanker.
Kurz gesagt, Docker-Container sind virtuelle „virtuelle Maschinen“. Virtuelle Maschinen sind komplette Kopien des Betriebssystems, inklusive Kernel und Hardware-Emulation, während Docker-Container den Kernel des Hosts teilen und dadurch viel leichter und schneller sind ⚡.
Das Deployment mit Docker macht alles viel einfacher, schneller und zuverlässiger. Das Projekt wird in Docker-Container gepackt, die man leicht verschieben und auf jedem System laufen lassen kann, das Docker unterstützt 🚢.
Das vermeidet Probleme durch unterschiedliche Server-Umgebungen und macht es einfach, die Anwendung zu skalieren, indem man Container hinzufügt oder entfernt, je nach Bedarf. Alle setzen auf Docker – das ist super bequem und einfach.
GO TO FULL VERSION