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
- Familiarisez-vous avec la création d'applications Java.
- Préparez votre projet Java, y compris un fichier
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
gcloud
sur cette page, installez la 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 surmaven
oumaven:<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'imagelatest
.entrypoint
: la définition de ce champ remplace le point d'entrée par défaut du référencée dansname
. Définissez la valeur de ce champ surmvn
pour appelermvn
en tant que point d'entrée de l'étape de compilation et exécuter les commandesmvn
.args
: Le champargs
d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champname
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 surgradle
ougradle:<tag>
, où le représente la version. Si vous ne spécifiez pas le tag d'image, Cloud Build utilise par défaut l'imagelatest
.entrypoint
: la définition de ce champ remplace le point d'entrée par défaut du référencée dansname
. Définissez la valeur de ce champ surgradle
pour l'appelergradle
comme point d'entrée de l'étape de compilation et exécuter les commandesgradle
.args
: Le champargs
d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champname
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
Dans le répertoire racine de votre projet, créez un fichier de configuration de compilation nommé
cloudbuild.yaml
.Exécuter des tests :
maven
etgradle
fournissent respectivement les commandesmaven test
etgradle 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 champargs
d'une étape de compilation prend une liste d'arguments et la transmet à l'image à laquelle le champname
fait référence.Dans votre fichier de configuration de compilation, ajoutez l'élément
test
au champargs
pour appeler l'optiontest
dansmaven
etgradle
: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 commandepackage
dans le champargs
. La commandepackage
génère un fichier JAR dans/workspace/target/
.Pour empaqueter votre application dans un fichier JAR pour votre image
gradle
, spécifiez la commandeassemble
dans le champargs
. La commandeassemble
génère un fichier JAR dansworkspace/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
name
et spécifiez l'image Docker prédéfinie dansgcr.io/cloud-builders/docker
- Ajoutez un champ
args
et spécifiez les argumentsbuild
, 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 champoptions
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
- 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.