Créer, tester et conteneuriser des applications Java

Cette page explique comment utiliser Cloud Build pour compiler, tester et conteneuriser des applications Java, importer vos images de conteneurs dans Artifact Registry et générer la provenance de la compilation.

Avant de commencer

Utiliser l'image maven ou gradle

Vous pouvez configurer Cloud Build pour qu'il compile les applications Java à l'aide de l'image maven ou de l'image gradle de Docker Hub.

maven

Pour exécuter vos tâches dans l'image maven, ajoutez une étape à votre configuration de compilation avec les champs suivants:

  • name : définissez la valeur de ce champ sur maven ou maven:<tag>, où le tag représente la version. Si vous ne spécifiez pas le tag d'image, Cloud Build utilise par défaut l'image latest.
  • entrypoint: la définition de ce champ remplace le point d'entrée par défaut du référencée dans name. Définissez la valeur de ce champ sur mvn pour appeler mvn en tant que point d'entrée de l'étape de compilation et exécuter les commandes mvn.
  • args : Le champ args d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ name fait référence.

L'étape de compilation suivante spécifie le entrypoint pour l'image maven avec le tag 3.3-jdk-8 et affiche la version de l'outil de compilation:

steps:
- name: maven:3.3-jdk-8
  entrypoint: mvn
  args: ['--version']

gradle

Pour exécuter vos tâches dans l'image gradle, ajoutez une étape à votre configuration de compilation avec les champs suivants :

  • name: définissez la valeur de ce champ sur gradle ou gradle:<tag>, où le représente la version. Si vous ne spécifiez pas le tag d'image, Cloud Build utilise par défaut l'image latest.
  • entrypoint: la définition de ce champ remplace le point d'entrée par défaut du référencée dans name. Définissez la valeur de ce champ sur gradle pour l'appeler gradle comme point d'entrée de l'étape de compilation et exécuter les commandes gradle.
  • args : Le champ args d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ name fait référence.

L'étape de compilation suivante spécifie le entrypoint pour l'image gradle avec le tag 5.6.2-jdk8 et affiche la version de l'outil de compilation:

steps:
- name: gradle:5.6.2-jdk8
  entrypoint: gradle
  args: ['--version']

Configurer les compilations Java

  1. Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation nommé cloudbuild.yaml.

  2. Exécuter des tests : maven et gradle fournissent respectivement les commandes maven test et gradle test, qui téléchargent les dépendances, compilent les applications et exécutent tous les tests spécifiés dans votre code source. Le champ args d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ name fait référence.

    Dans votre fichier de configuration de compilation, ajoutez l'élément test au champ args pour appeler l'option test dans maven et gradle :

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['test']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['test']
    
  3. Empaqueter l'application : pour empaqueter votre application dans un fichier JAR pour votre image maven, spécifiez la commande package dans le champ args. La commande package génère un fichier JAR dans /workspace/target/.

    Pour empaqueter votre application dans un fichier JAR pour votre image gradle, spécifiez la commande assemble dans le champ args. La commande assemble génère un fichier JAR dans workspace/build/libs.

    L'étape de compilation suivante permet d'empaqueter votre application Java :

    maven

    steps:
    - name: maven:3.3-jdk-8
      entrypoint: mvn
      args: ['package','-Dmaven.test.skip=true']
    

    gradle

    steps:
    - name: gradle:5.6.2-jdk8
      entrypoint: gradle
      args: ['assemble']
    
  4. Mettre l'application en conteneur : Cloud Build fournit une image Docker précompilée que vous pouvez utiliser pour conteneuriser votre application Java. Pour mettre votre application Java en conteneur, modifiez votre fichier de configuration de compilation comme suit :

    • Ajoutez un champ name et spécifiez l'image Docker prédéfinie dans gcr.io/cloud-builders/docker
    • Ajoutez un champ args et spécifiez les arguments build, y compris le nom du l'image de conteneur à compiler et le chemin d'accès à votre artefact de compilation.
    • Ajoutez un champ images pour transférer l'image de conteneur créée vers Artifact Registry.
    • Facultatif : Ajoutez requestedVerifyOption: VERIFIED dans le champ options de votre fichier de configuration de compilation pour activer la génération de la provenance SLSA (Supply chain Levels for Software Artifacts).

    L'étape de compilation suivante intègre votre application dans un conteneur, transfère votre image de conteneur vers Artifact Registry et génère des informations sur la provenance de la compilation :

    maven

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=target/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    gradle

    steps:
    - name: gcr.io/cloud-builders/docker
      args: ['build', '-t', 'location-docker.pkg.dev/project-id/repository/image', '--build-arg=JAR_FILE=build/libs/build-artifact', '.']
    images: ['location-docker.pkg.dev/project-id/repository/image']
    

    Où :

    • location: emplacement régional ou multirégional de votre dépôt.
    • project-id : ID de votre projet Google Cloud
    • repository : nom de votre dépôt Artifact Registry.
    • image : nom de votre image de conteneur
    • build-artifact : nom du fichier JAR créé à l'étape de compilation
  5. Démarrer la compilation : lorsque votre fichier de configuration de compilation est prêt, lancez votre compilation en saisissant la commande suivante dans votre terminal :

    gcloud builds submit --region=REGION --config config-file-path source-directory
    

    Où :

    • config-file-path: chemin d'accès à votre fichier de configuration de compilation. Dans cet exemple, le fichier de configuration de compilation s'appelle cloudbuild.yaml.
    • source-directory : chemin ou URL de votre code source
    • REGION : l'une des régions de compilation disponibles.

    Si vous ne spécifiez pas les éléments config-file-path et source-directory dans la commande gcloud builds submit, Cloud Build considère que le fichier de configuration et le code source se trouvent dans le répertoire de travail actuel.

    Une fois la compilation terminée, vous pouvez afficher les détails du dépôt. dans Artifact Registry.

    Vous pouvez également afficher les métadonnées de provenance du build et valider la provenance.

Exemples de code

Voici quelques exemples de dépôts que vous pouvez utiliser pour créer des applications Java, chacun contenant un exemple d'application et un fichier de configuration de compilation permettant de compiler et tester cette application :

  • maven-example : une application Java et un exemple de fichier de configuration de compilation permettant de compiler et tester l'application avec mvn.
  • gradle-example : une application Java et un exemple de fichier de configuration de compilation permettant de créer et tester l'application avec gradle.

Étape suivante