Es ist wichtig und schwierig, Ihre Anwendungen auf dem neuesten Stand zu halten. In diesem Dokument werden einige grundlegende Schritte beschrieben, die Java-Entwicklern mit den DevOps-Praktiken beginnen können. Diese Liste ist nicht vollständig. Die meisten dieser Ideen stammen aus den DORA-DevOps-Forschungs- und -Bewertungsstudien, die einen vollständigen Überblick über Best Practices bieten. Andere Quellen sind unter anderem Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations von Nicole Forsgren PhD, Jez Humble und Gene Kim und Software Engineering at Google, zusammengestellt von Titus Winters, Tom Manshreck und Hyrum Wright
Bevor Sie diese Seite lesen, sollten Sie den Artikel Java-Entwicklungsumgebung einrichten lesen.
Die Anforderungen jeder Entwicklungsorganisation sind individuell, aber ein einfaches System könnte mit einem der folgenden Softwarepakete konstruiert werden:
Beispieltechnologie-Stack 1 | Beispieltechnologie-Stack 2 |
---|---|
|
|
Mit einem einfachen System, das mit diesen Komponenten erstellt wird, können Sie die Qualität und die Zykluszeit verbessern. Außerdem können Sie Ihren Code ganz einfach mit den neuesten Fehlerkorrekturen und Sicherheitsupdates auf dem neuesten Stand halten.
Versionsverwaltung
Forschung (Seite 17 ,Seite 14 ,Seite 31 und Seite 60) wurde festgestellt, dass Versionsverwaltung für den Quellcode in Kombination mit Automatisierung und Tests verbesserte Qualität und viele andere Vorteile voraussagt.
- Cloud Source Repositories [Kurzanleitung] bieten einen kostenlosen Git-Workflow für Ihren Quellcode.
- Artifact Registry [Container] [Java-Pakete] ist ein guter Ort, um Ihre erstellten Java-Artefakte aufzubewahren.
GitHub, Gitlab und Bitbucket eignen sich auch gut für Ihren Quellcode.
Automatisierte Tests
Kontinuierliche Tests können für die meisten dieser Verfahren entscheidend für Ihren Erfolg sein. Weitere Informationen zum Testen von Best Practices finden Sie im SRE-Kapitel über Zuverlässigkeitstests und im Google Testing-Blog.
Java-Entwickler interessieren sich hauptsächlich für automatisierte Einheitentests und Integrationstests. JUnit, Testen mit Spring, Apache Maven Surefire und Gradle Java-Tests sind nützliche Ressourcen für Java-Entwickler.
Kontinuierliche Integration und Bereitstellungsautomatisierung
Continuous Integration und Bereitstellungsautomatisierung unterstützen moderne DevOps-Jobs. Erstellen, testen und bereitstellen
- Cloud Build [QuickStarts ] [Java-spezifisch ] [Bereitstellung ] [Trigger] bietet ein kostenloses (120 Build-Minuten / Tag) oder kostengünstiges Build-System, das für die meisten Jobs einfach angepasst werden kann.
- Tekton ist ein Open-Source-Projekt, mit dem Sie die Cloud Build-Ideen einfach an Ihre Systeme anpassen können.
- Spinnaker ist eine Open-Source-Multi-Cloud-Plattform für Continuous Delivery, mit der Sie Softwareänderungen schnell und zuverlässig veröffentlichen können. Es unterstützt Sie dabei, komplexe Softwaresysteme freizugeben und ein Rollback durchzuführen.
- GitHub's Actions ist eine Drittanbieterlösung, mit der Sie ganz einfach Tests einrichten und auf GitHub ausführen können.
- Es gibt auch viele andere Lösungen wie Gitlab, Circle CI und Travis CI.
Cloud-Clientbibliotheken
Es gibt viele Möglichkeiten für die Verwendung von Google-Diensten. Am besten folgen Sie der Anleitung auf der Seite Cloud-Clientbibliotheken. Bei Java kann die Libraries-BOM dafür sorgen, dass Sie kompatible Versionen der einzelnen Artefakte verwenden.
Wenn Sie eigene Versionen von Clientbibliotheken auswählen, ist es möglich, dass ein inkompatibles Artefakt ausgewählt wird. Dies wird als Diamantabhängigkeitsproblem bezeichnet. Wenn Sie dennoch Ihre einzelnen Bibliotheken auswählen müssen, aktualisieren Sie diese einzeln und testen Sie, ob bei der Aktualisierung ein Fehler aufgetreten ist. Die neuesten Versionen werden immer auf dieser Seite aufgelistet oder Sie finden sie über die Maven-Central.
Abhängigkeiten auf dem neuesten Stand halten
Zum Schutz vor böswilligen Akteuren ist es wichtig, dass Sie Ihre Abhängigkeiten auf dem neuesten Stand halten. Es gibt viele Tools von Drittanbietern, die Ihnen dabei helfen können:
Wenn diese Tools ordnungsgemäß konfiguriert sind, können Sie Ihre Abhängigkeiten auf dem neuesten Stand halten. Wenn Sie automatisierte Tests und Continuous Integration / Continuous Deployment kombinieren, wird der Ablauf:
- Die Abhängigkeitsautomatisierung schlägt eine Änderung der Versionsverwaltung vor.
- Das kontinuierliche Build-System erstellt und testet die Änderung.
- Ein Mensch prüft den Vorschlag und akzeptiert gegebenenfalls die Änderung, zusammen mit anderen Änderungen.
- Nachdem die Änderungen akzeptiert wurden, wird ein Angebot an das Continuous Delivery-System gesendet, um den Code für die Produktion freizugeben. Alternativ können Sie Ihren benutzerdefinierten Prozess befolgen.
Unterstützte Java-Laufzeitumgebung (JRE) verwenden
Die JRE, eine Teilmenge des Java Development Kits, befindet sich auf Ihrem Betriebssystem und bietet die Software und Ressourcen, die zum Ausführen einer Java-Anwendung erforderlich sind. Die meisten Nutzer bevorzugen in der Produktion die neueste LTS-Version, damit sie Zugriff auf Updates, Sicherheit und Fehlerkorrekturen haben. Normalerweise ist es möglich, auf eine neuere JRE zu aktualisieren, auch wenn Ihr Code für ein früheres JDK kompiliert wurde.
Wenn Sie mit mehreren JDK-Versionen arbeiten, kann Ihnen SDKMAN! verschiedene JDK-Versionen verwenden und verwalten.
Container verwenden (Google Kubernetes Engine-, Cloud Run-, Anthos-Cluster)
Wenn Sie Docker-Container mit RenovateBot oder DependaBot verwenden, schlägt der Bot regelmäßig Aktualisierungen für Ihr JRE und Ihr JDK vor. Sie sollten das JDK und die JRE auf derselben Version halten.
Wir empfehlen die Verwendung von Jib, um Ihre Java-Anwendungen in den meisten Fällen zu containerisieren.
Wenn Sie das Dockerfile manuell aktualisieren, ändern Sie einfach die JRE auf die neueste Version und erstellen Sie sie neu.
Compute Engine verwenden
Dies ist in der Regel sehr anwendungsspezifisch. Wir empfehlen die Verwendung eines Startskripts. Zum Aktualisieren müssen Sie das Skript aktualisieren.
Flexible App Engine-Umgebung
App Engine Standard
App Engine-Anwendung von Java 8 zu Java 11 migrieren
LTS-Version des Java Development Kits verwenden
Das JDK besteht aus einer Reihe von Tools zur Entwicklung von Java-Anwendungen. Neue Sprachfunktionen sind an ein bestimmtes JDK gebunden. Wir empfehlen, Ihre Nutzung an ein JDK mit Langzeitsupport (LTS) anzuheften und auf die nächste LTS-Version zu aktualisieren, wenn dies für Ihre Anwendung geeignet ist. Wir empfehlen die Verwendung des neuesten Nebenrelease des angepinnten Haupt-LTS-Release.
Die meisten Nutzer möchten JDK und JRE synchronisieren. Manchmal ist dies nicht möglich, z. B. wenn das JDK nicht mehr unterstützt wird. Sie müssen dann ein späteres JDK kompilieren und auf einer früheren JRE ausgeführt werden.
Mit Maven:
Legen Sie die Sprachebene fest, in der Sie codieren möchten, und die Ziel-JRE. Aktualisieren Sie die Datei pom.xml
so (für Java 8): xml
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
Zum Aktualisieren auf Java 11 ändern Sie es so:
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
Wenn Sie Gradle verwenden, aktualisieren Sie die Datei build.gradle
für Java 8 mit:
compileJava {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
Oder für Java 11:
compileJava {
sourceCompatibility = 11
targetCompatibility = 11
}
Beachten Sie, dass für Java 8 und frühere Versionen die Präfix 1.
(1.7
für Java 7, 1.8
für Java 8) vorhanden war, die nach Java 8 verworfen wurde.