Bonnes pratiques Java

Il est devenu important et il est difficile de maintenir à jour vos applications. Ce document décrit les étapes de base pour que les développeurs Java puissent se familiariser avec les pratiques DevOps. Il ne s'agit pas d'une liste exhaustive. La plupart de ces idées sont issues des études DORA (DevOps Research and Assessment). Les autres sources incluent Accelerate: The Science of Lean Software and DevOpsOps: Building and Scaling High-Tech Technology parDocteur Nicole Forsgren ",Jez Humble etGene Kim ; etL'ingénierie logicielle chez Google créée parTitus Winters ,Tom Manshreck etHyrum Wright s'affiche en haut de l'écran.

Avant de lire cette page, il est recommandé de lire la page Configurer un environnement de développement Java.

Les besoins de chaque organisation de développement sont uniques, mais un système de base peut être construit à l'aide de l'une des piles technologiques suivantes:

Exemple de pile technologique 1 Exemple de pile technologique 2
  • Cloud Source Repositories, Github ou Bitbucket pour le code source.
  • Whitesource RenovateBott pour actualiser les artefacts et les bibliothèques.
  • Cloud Build pour les tests unitaires / pré-envois
  • Cloud Build pour les tests d'intégration
  • Cloud Build pour le déploiement
  • GitHub pour le code source.
  • GitHub GitHub Dependabot pour maintenir à jour les artefacts et les bibliothèques
  • Actions GitHub pour les tests de pré-envoi
  • Actions GitHub pour les tests d'intégration
  • Actions GitHub pour le déploiement

Un système simple conçu avec ces composants peut vous aider à améliorer la qualité et la durée des cycles. Il vous permet également de mettre facilement à jour votre code avec les derniers correctifs de sécurité et les dernières mises à jour de sécurité.

Contrôle des versions

Étude de marché (page 17 page 14 page 31 etpage 60 ) a constaté quecontrôle des versions pour le code source et l'automatisation et testent les performances et la qualité.

Github, GitLab et Bitbucket sont également de bons emplacements pour votre code source.

Tests automatisés

Les tests continus peuvent être essentiels à votre réussite en utilisant la plupart de ces techniques. Consultez le blog des tests SRE pour la fiabilité et le blog des tests Google pour en savoir plus sur les bonnes pratiques à suivre pour tester les bonnes pratiques.

Les développeurs Java se préoccupent principalement des tests unitaires automatisés et des tests d'intégration. JUnit, Test with Spring, Apache Maven Surefire et Test Java Gradle sont des ressources utiles pour les développeurs Java.

Intégration continue / Automatisation du déploiement

L'intégration continue et l'automatisation des déploiements alimentent les tâches DevOps modernes. Compilez, testez et déployez.

  • Cloud Build [Guides de démarrage rapide ]Java ]Déploiement ]Déclencher] fournit un Gratuit (120 minutes de compilation par jour) ou système de compilation peu coûteux et facile à utiliser, que vous pouvez facilement personnaliser pour la plupart des tâches.
  • Tekton est un projet Open Source qui vous permet d'adapter facilement les idées Cloud Build à vos systèmes.
  • Spinnaker est une plate-forme multicloud de livraison continue Open Source qui vous permet de publier des modifications logicielles rapidement et avec une grande fiabilité. Il vous aide à gérer le processus de provisionnement et de rollback des systèmes logiciels complexes.
  • Github Actions est une solution tierce qui vous permet de configurer facilement des tests et de les exécuter sur Github.
  • Il existe également de nombreuses autres solutions, telles que Slack, Circle CI et Travis CI.

Bibliothèques clientes Google Cloud

Il existe plusieurs façons d'utiliser les services Google, mais la méthode recommandée consiste à suivre les instructions de la page Bibliothèques clientes Cloud. Pour Java, la bibliothèque Libraries-BOM peut vous aider à vérifier que vous utilisez des versions compatibles de chaque artefact.

Si vous décidez de choisir vos propres versions de bibliothèques clientes, il est possible qu'un artefact incompatible soit sélectionné. C'est ce qu'on appelle le problème de dépendance diamond. Si vous devez toujours choisir vos bibliothèques individuelles, mettez-les à jour une par une et vérifiez si la mise à jour a introduit une erreur. Les dernières versions sont toujours répertoriées sur cette page ou sont disponibles en effectuant une recherche dans Maven-Central.

Maintenir les dépendances à jour

Pour vous protéger contre les acteurs malveillants, il est essentiel de maintenir vos dépendances à jour. De nombreux outils tiers vous aident à faire cela:

Lorsqu'ils sont correctement configurés, ces outils vous aident à maintenir vos dépendances à jour. Lorsque vous combinez les tests automatisés et l'intégration continue / Déploiement continu, le flux devient:

  • L'automatisation de dépendances propose une modification de votre contrôle source.
  • Le système de compilation continue crée et teste la modification.
  • Un employé examine la proposition et, le cas échéant, l'accepte, éventuellement avec d'autres modifications.
  • Une fois les modifications acceptées, le système de livraison continue envoie une proposition au système de diffusion continue afin de libérer le code en production. (ou votre processus personnalisé est suivi).

Utiliser un environnement d'exécution Java (JRE, Java Runtime Environment) compatible

Le JRE, un sous-ensemble du kit de développement Java, se trouve sur votre système d'exploitation et fournit le logiciel et les ressources nécessaires pour exécuter une application Java. La plupart des utilisateurs préfèrent utiliser la dernière version LTS en production pour pouvoir accéder aux mises à jour, à la sécurité et aux corrections de bugs. Il est généralement possible de mettre à jour un code JRE ultérieurement, même si votre code est compilé avec un JDK antérieur.

Si vous utilisez plusieurs versions de JDK, SDKMAN! peut vous aider à utiliser et à gérer différentes versions de JDK.

Utiliser des conteneurs (Google Kubernetes Engine, Cloud Run, clusters Anthos)

Si vous utilisez des conteneurs Docker avec RenovateBot ou DependaBot, le bot propose régulièrement des mises à jour de votre JRE et de votre JDK. Vous devez conserver le JDK et le JRE dans la même version.

Nous vous recommandons d'utiliser Jib pour intégrer vos applications Java dans des conteneurs.

Si vous mettez à jour manuellement votre fichier Dockerfile, il vous suffit de modifier le JRE au dernier format et de le recompiler.

Utiliser Compute Engine

Cette méthode est généralement très spécifique aux applications. Nous vous recommandons d'utiliser un script de démarrage. Pour procéder à la mise à niveau, vous devez mettre à jour le script.

Environnement flexible App Engine

Compatible uniquement avec Java 8.

Environnement standard App Engine

Consultez la page Migrer votre application App Engine de Java 8 vers Java 11.

Utiliser une version LTS du Java Development Kit

Le JDK est un ensemble d'outils pour le développement d'applications Java. De nouvelles fonctionnalités de langage sont liées à un JDK particulier. Nous vous recommandons d'épingler votre utilisation à un JDK avec LTS (Long Term Support), puis à passer à la version LTS suivante, le cas échéant. Nous vous recommandons d'utiliser la dernière version mineure de la version majeure LTS épinglée.

La plupart des utilisateurs souhaitent synchroniser les fichiers JDK et JRE. Cette opération n'est pas toujours possible (par exemple, lorsque le JDK n'est plus compatible). Vous devez alors procéder à la compilation avec un JDK plus tard et l'exécuter sur un code JRE antérieur.

Pour effectuer cette opération avec Maven, procédez comme suit:

Définissez le niveau de langue dans lequel vous souhaitez coder votre code et le JRE cible. Mettez à jour votre fichier pom.xml comme suit (pour Java 8) : xml <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>

Pour passer à Java 11, vous devez la remplacer par:

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>

Si vous utilisez Gradle, mettez à jour votre fichier build.gradle pour Java 8 avec la commande suivante:

compileJava {
  sourceCompatibility = 1.8
  targetCompatibility = 1.8
}

Ou pour Java 11:

compileJava {
  sourceCompatibility = 11
  targetCompatibility = 11
}

Notez que pour Java 8 et versions antérieures, le préfixe 1. (1.7 pour Java 7, 1.8 pour Java 8) avait été supprimé après Java 8.