Crea, testa e containerizza le applicazioni Java

Questa pagina spiega come utilizzare Cloud Build per creare, testare e eseguire il containerizzazione di applicazioni basate su Java, caricare le immagini dei container in Artifact Registry e generare la provenienza della build.

Prima di iniziare

Utilizzare l'immagine maven o gradle

Puoi configurare Cloud Build per creare applicazioni Java utilizzando l'immagine maven o l'immagine gradle da Docker Hub.

maven

Per eseguire le attività nell'immagine maven, aggiungi un passaggio alla configurazione di compilazione con i seguenti campi:

  • name: imposta il valore di questo campo su maven o maven:<tag>, dove il tag rappresenta la versione. Se non specifichi il tag immagine, Cloud Build utilizza per impostazione predefinita l'immagine latest.
  • entrypoint: l'impostazione di questo campo sostituisce il punto di contatto predefinito dell'immagine a cui si fa riferimento in name. Imposta il valore di questo campo su mvn per invocare mvn come punto di contatto del passaggio di compilazione ed eseguire i comandi mvn.
  • args: il campo args di un passaggio di compilazione prende un elenco di argomenti e li passa all'immagine a cui fa riferimento il campo name.

Il seguente passaggio di compilazione specifica il entrypoint per l'immagine maven taggata come 3.3-jdk-8 e stampa la versione dello strumento di compilazione:

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

gradle

Per eseguire le attività nell'immagine gradle, aggiungi un passaggio alla configurazione di compilazione con i seguenti campi:

  • name: imposta il valore di questo campo su gradle o gradle:<tag>, dove il tag rappresenta la versione. Se non specifichi il tag immagine, Cloud Build utilizza per impostazione predefinita l'immagine latest.
  • entrypoint: l'impostazione di questo campo sostituisce il punto di contatto predefinito dell'immagine a cui si fa riferimento in name. Imposta il valore di questo campo su gradle per invocare gradle come punto di contatto del passaggio di compilazione ed eseguire i comandi gradle.
  • args: il campo args di un passaggio di compilazione prende un elenco di argomenti e li passa all'immagine a cui fa riferimento il campo name.

Il seguente passaggio di compilazione specifica il entrypoint per l'immagine gradle taggata come 5.6.2-jdk8 e stampa la versione dello strumento di compilazione:

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

Configurazione delle build di Java

  1. Nella directory principale del progetto, crea un file di configurazione della build denominato cloudbuild.yaml.

  2. Esegui test: maven e gradle forniscono maven test e gradle test, che scaricano le dipendenze, creano le applicazioni ed eseguono eventuali test specificati nel codice sorgente. Il campo args di un passaggio di compilazione accetta un elenco di argomenti e li passa all'immagine a cui fa riferimento il campo name.

    Nel file di configurazione di compilazione, aggiungi test al campo args per richiamare test all'interno di maven e 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. Pacchettizza l'applicazione: per pacchettizzare l'applicazione in un file JAR per l'immagine maven, specifica il comando package nel campo args. Il comando package crea un file JAR in /workspace/target/.

    Per pacchettizzare l'applicazione in un file JAR per l'immagine gradle, specifica il comando assemble nel campo args. Il comando assemble genera un file JAR in workspace/build/libs.

    Il seguente passaggio di compilazione esegue il pacchettizzazione dell'applicazione 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. Containerizza l'applicazione: Cloud Build fornisce un'immagine Docker predefinita che puoi utilizzare per containerizzare l'applicazione Java. Per eseguire il containerizzazione della tua applicazione Java, nel file di configurazione della build:

    • Aggiungi un campo name e specifica l'immagine Docker predefinita in gcr.io/cloud-builders/docker.
    • Aggiungi un campo args e specifica gli argomenti build, incluso il nome dell'immagine container da creare e il percorso dell'elemento della build.
    • Aggiungi un campo images per eseguire il push dell'immagine container compilata in Artifact Registry.
    • (Facoltativo) Aggiungi requestedVerifyOption: VERIFIED nel campo options del file di configurazione di compilazione per attivare la generazione della provenienza Supply Chain Levels for Software Artifacts (SLSA).

    Il seguente passaggio di compilazione esegue il containerizzazione dell'applicazione, esegue il push dell'immagine del container in Artifact Registry e genera informazioni sull'origine della compilazione:

    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']
    

    Dove:

    • location: la posizione regionale o multiregionale del repository.
    • project-id: l'ID del tuo progetto Google Cloud.
    • repository: il nome del repository Artifact Registry.
    • image: il nome dell'immagine del contenitore.
    • build-artifact: il nome del file JAR creato dal passaggio di compilazione.
  5. Avvia la build: quando il file di configurazione della build è pronto, avvia la build inserendo il seguente comando nel terminale:

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

    Dove:

    • config-file-path: il percorso del file di configurazione di compilazione. In questo esempio, il file di configurazione di compilazione è denominato cloudbuild.yaml.
    • source-directory: il percorso o l'URL del codice sorgente.
    • REGION: una delle regioni di compilazione supportate.

    Se non specifichi config-file-path e source-directory nel comando gcloud builds submit, Cloud Build presuppone che il file di configurazione e il codice sorgente si trovino nella directory di lavoro corrente.

    Al termine della build, puoi visualizzare i dettagli del repository in Artifact Registry.

    Puoi anche visualizzare i metadati dell'origine della compilazione e convalidare l'origine.

Esempi di codice

Ecco alcuni esempi di repository che puoi utilizzare per creare app Java, ognuno dei quali contiene un'applicazione di esempio e un file di configurazione della build per compilare e testare l'applicazione:

  • maven-example: un'app Java e un file di configurazione di build di esempio per compilare e testare l'app con mvn.
  • gradle-example: un'app Java e un file di configurazione di compilazione di esempio per compilare e testare l'app con gradle.

Passaggi successivi