Cette page explique comment utiliser Cloud Build pour compiler, tester et conteneuriser des applications Java, importer vos images de conteneur dans Artifact Registry et générer une provenance de compilation.
Avant de commencer
- Familiarisez-vous avec la création d'applications Java.
- Préparez votre projet Java, y compris un Dockerfile.
- disposer d'un dépôt Docker dans Artifact Registry ou en créer un ;
- Familiarisez-vous avec la rédaction d'un fichier de configuration Cloud Build.
- Pour exécuter les commandes gcloudsur cette page, installez Google Cloud CLI.
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- mavenou- 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 de l'image référencée dans- name. Définissez la valeur de ce champ sur- mvnpour appeler- mvnen tant que point d'entrée de l'étape de compilation et exécuter les commandes- mvn.
- args: Le champ- argsd'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ- namefait référence.
L'étape de compilation suivante spécifie le entrypoint de l'image maven taguée comme 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- gradleou- gradle:<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 de l'image référencée dans- name. Définissez la valeur de ce champ sur- gradlepour appeler- gradleen tant que point d'entrée de l'étape de compilation et exécuter les commandes- gradle.
- args: Le champ- argsd'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ- namefait référence.
L'étape de compilation suivante spécifie le entrypoint de l'image gradle taguée comme 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
- Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation nommé - cloudbuild.yaml.
- Exécuter des tests : - mavenet- gradlefournissent respectivement les commandes- maven testet- 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- argsd'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champ- namefait référence.- Dans votre fichier de configuration de compilation, ajoutez l'élément - testau champ- argspour appeler l'option- testdans- mavenet- 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']
- Empaqueter l'application : pour empaqueter votre application dans un fichier JAR pour votre image - maven, spécifiez la commande- packagedans le champ- args. La commande- packagegénère un fichier JAR dans- /workspace/target/.- Pour empaqueter votre application dans un fichier JAR pour votre image - gradle, spécifiez la commande- assembledans le champ- args. La commande- assemblegé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']
- 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 nameet spécifiez l'image Docker prédéfinie à l'emplacementgcr.io/cloud-builders/docker.
- Ajoutez un champ argset spécifiez les argumentsbuild, y compris le nom de l'image de conteneur à générer et le chemin d'accès à votre artefact de compilation.
- Ajoutez un champ imagespour transférer l'image de conteneur générée vers Artifact Registry.
- Facultatif: Ajoutez - requestedVerifyOption: VERIFIEDdans le champ- optionsde 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 Google Cloud projet.
- 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
 
- Ajoutez un champ 
- 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. 
- config-file-path: chemin d'accès à votre fichier de configuration de compilation. Dans cet exemple, le fichier de configuration de compilation s'appelle 
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
- Découvrez comment afficher les résultats de la compilation.
- Découvrez comment protéger les builds.
- Découvrez comment créer des applications Java autonomes.
- Découvrez comment déployer une application sur Cloud Run.
- Découvrez comment déployer une application sur GKE.
- Découvrez comment résoudre les erreurs de compilation.