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
- Devi conoscere la creazione di applicazioni basate su Java.
- Prepara il tuo progetto Java, incluso un
Dockerfile
. - Avere un repository Docker in Artifact Registry o creare un nuovo repository.
- Devi conoscere come scrivere un file di configurazione di Cloud Build.
- Per eseguire i comandi
gcloud
in questa pagina, installa Google Cloud CLI.
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 sumaven
omaven:<tag>
, dove il tag rappresenta la versione. Se non specifichi il tag immagine, Cloud Build utilizza per impostazione predefinita l'immaginelatest
.entrypoint
: l'impostazione di questo campo sostituisce il punto di contatto predefinito dell'immagine a cui si fa riferimento inname
. Imposta il valore di questo campo sumvn
per invocaremvn
come punto di contatto del passaggio di compilazione ed eseguire i comandimvn
.args
: il campoargs
di un passaggio di compilazione prende un elenco di argomenti e li passa all'immagine a cui fa riferimento il camponame
.
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 sugradle
ogradle:<tag>
, dove il tag rappresenta la versione. Se non specifichi il tag immagine, Cloud Build utilizza per impostazione predefinita l'immaginelatest
.entrypoint
: l'impostazione di questo campo sostituisce il punto di contatto predefinito dell'immagine a cui si fa riferimento inname
. Imposta il valore di questo campo sugradle
per invocaregradle
come punto di contatto del passaggio di compilazione ed eseguire i comandigradle
.args
: il campoargs
di un passaggio di compilazione prende un elenco di argomenti e li passa all'immagine a cui fa riferimento il camponame
.
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
Nella directory principale del progetto, crea un file di configurazione della build denominato
cloudbuild.yaml
.Esegui test:
maven
egradle
fornisconomaven test
egradle test
, che scaricano le dipendenze, creano le applicazioni ed eseguono eventuali test specificati nel codice sorgente. Il campoargs
di un passaggio di compilazione accetta un elenco di argomenti e li passa all'immagine a cui fa riferimento il camponame
.Nel file di configurazione di compilazione, aggiungi
test
al campoargs
per richiamaretest
all'interno dimaven
egradle
:maven
steps: - name: maven:3.3-jdk-8 entrypoint: mvn args: ['test']
gradle
steps: - name: gradle:5.6.2-jdk8 entrypoint: gradle args: ['test']
Pacchettizza l'applicazione: per pacchettizzare l'applicazione in un file JAR per l'immagine
maven
, specifica il comandopackage
nel campoargs
. Il comandopackage
crea un file JAR in/workspace/target/
.Per pacchettizzare l'applicazione in un file JAR per l'immagine
gradle
, specifica il comandoassemble
nel campoargs
. Il comandoassemble
genera un file JAR inworkspace/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']
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 ingcr.io/cloud-builders/docker
. - Aggiungi un campo
args
e specifica gli argomentibuild
, 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 campooptions
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.
- Aggiungi un campo
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.
- config-file-path: il percorso del file di configurazione di compilazione. In questo esempio, il file di configurazione di compilazione è denominato
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
- Scopri come visualizzare i risultati della build.
- Scopri come proteggere le build.
- Scopri come creare applicazioni Java autonome.
- Scopri come eseguire il deployment di un'applicazione su Cloud Run.
- Scopri come eseguire il deployment di un'applicazione su GKE.
- Scopri come risolvere gli errori di compilazione.