Esta página explica como usar o Cloud Build para compilar, testar e colocar em contentores aplicações baseadas em Java, carregar as suas imagens de contentores para o Artifact Registry e gerar a proveniência da compilação.
Antes de começar
- Ter experiência na criação de aplicações baseadas em Java.
- Prepare o seu projeto Java, incluindo um
Dockerfile
. - Ter um repositório do Docker no Artifact Registry ou criar um novo repositório.
- Conhecer como escrever um ficheiro de configuração do Cloud Build.
- Para executar os comandos
gcloud
nesta página, instale a CLI do Google Cloud.
Usar a imagem maven
ou gradle
Pode configurar o Cloud Build para criar aplicações Java através da imagem maven
ou da imagem gradle
do Docker Hub.
maven
Para executar as suas tarefas na imagem maven
, adicione um passo à configuração de compilação com os seguintes campos:
name
: defina o valor deste campo comomaven
oumaven:<tag>
, em que a etiqueta representa a versão. Se não especificar a etiqueta de imagem, o Cloud Build usa a imagemlatest
por predefinição.entrypoint
: a definição deste campo substitui o ponto de entrada predefinido da imagem referenciada emname
. Defina o valor deste campo comomvn
para invocarmvn
como o ponto de entrada da etapa de compilação e executar comandosmvn
.args
: o campoargs
de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo camponame
.
O passo de compilação seguinte especifica o entrypoint
para a imagem maven
etiquetada como 3.3-jdk-8
e imprime a versão da ferramenta de compilação:
steps:
- name: maven:3.3-jdk-8
entrypoint: mvn
args: ['--version']
gradle
Para executar as suas tarefas na imagem gradle
, adicione um passo à configuração de compilação com os seguintes campos:
name
: defina o valor deste campo comogradle
ougradle:<tag>
, em que a etiqueta representa a versão. Se não especificar a etiqueta de imagem, o Cloud Build usa a imagemlatest
por predefinição.entrypoint
: a definição deste campo substitui o ponto de entrada predefinido da imagem referenciada emname
. Defina o valor deste campo comogradle
para invocargradle
como o ponto de entrada da etapa de compilação e executar comandosgradle
.args
: o campoargs
de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo camponame
.
O passo de compilação seguinte especifica o entrypoint
para a imagem gradle
etiquetada como 5.6.2-jdk8
e imprime a versão da ferramenta de compilação:
steps:
- name: gradle:5.6.2-jdk8
entrypoint: gradle
args: ['--version']
Configurar compilações Java
No diretório raiz do projeto, crie um ficheiro de configuração de compilação denominado
cloudbuild.yaml
.Executar testes:
maven
egradle
fornecemmaven test
egradle test
, que transfere dependências, cria as aplicações e executa todos os testes especificados no seu código-fonte. O campoargs
de um passo de compilação usa uma lista de argumentos e transmite-os à imagem referenciada pelo camponame
.No ficheiro de configuração de compilação, adicione
test
ao campoargs
para invocartest
emmaven
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']
Empacote a aplicação: para empacotar a aplicação num ficheiro JAR para a sua imagem
maven
, especifique o comandopackage
no campoargs
. O comandopackage
cria um ficheiro JAR em/workspace/target/
.Para criar um pacote da sua aplicação num ficheiro JAR para a sua imagem
gradle
, especifique o comandoassemble
no campoargs
. O comandoassemble
cria um ficheiro JAR emworkspace/build/libs
.O seguinte passo de compilação compacta a sua aplicação 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']
Coloque a aplicação num contentor: o Cloud Build fornece uma imagem de Docker pré-criada que pode usar para colocar a sua aplicação Java num contentor. Para contentorizar a sua aplicação Java, no ficheiro de configuração de compilação:
- Adicione um campo
name
e especifique a imagem Docker pré-criada emgcr.io/cloud-builders/docker
. - Adicione um campo
args
e especifique os argumentosbuild
, incluindo o nome da imagem do contentor a criar e o caminho para o artefacto de compilação. - Adicione um campo
images
para enviar a imagem do contentor criada para o Artifact Registry. Opcional: adicione
requestedVerifyOption: VERIFIED
no campooptions
do ficheiro de configuração de compilação para ativar a geração de proveniência das cadeias de fornecimento de níveis para artefactos de software (SLSA).
O seguinte passo de compilação coloca a sua aplicação num contentor, envia a imagem do contentor para o Artifact Registry e gera informações de proveniência da compilação:
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']
Onde:
- location: a localização regional ou multirregional do seu repositório.
- project-id: o ID do seu projeto Google Cloud .
- repository: o nome do seu repositório do Artifact Registry.
- image: o nome da imagem do contentor.
- build-artifact: o nome do ficheiro JAR criado a partir do passo de compilação.
- Adicione um campo
Inicie a compilação: quando tiver o ficheiro de configuração da compilação pronto, inicie a compilação introduzindo o seguinte comando no terminal:
gcloud builds submit --region=REGION --config config-file-path source-directory
Onde:
- config-file-path: o caminho para o ficheiro de configuração de compilação. Neste exemplo, o nome do ficheiro de configuração de compilação é
cloudbuild.yaml
. - source-directory: o caminho ou o URL para o código fonte.
REGION
: uma das regiões de compilação suportadas.
Se não especificar um config-file-path e um source-directory no comando
gcloud builds submit
, o Cloud Build assume que o ficheiro de configuração e o código-fonte estão no diretório de trabalho atual.Quando a compilação estiver concluída, pode ver os detalhes do repositório no Artifact Registry.
Também pode ver metadados de proveniência da compilação e validar a proveniência.
- config-file-path: o caminho para o ficheiro de configuração de compilação. Neste exemplo, o nome do ficheiro de configuração de compilação é
Exemplos de código
Seguem-se alguns exemplos de repositórios que pode usar para criar apps Java. Cada um deles contém uma aplicação de exemplo e um ficheiro de configuração de compilação para compilar e testar essa aplicação:
- maven-example: uma app Java e um ficheiro de configuração de compilação de exemplo para compilar e testar a app com o
mvn
. - gradle-example: uma app Java e um ficheiro de configuração de compilação de exemplo para compilar e testar a app com
gradle
.
O que se segue?
- Saiba como ver os resultados da compilação.
- Saiba como proteger as compilações.
- Saiba como criar aplicações Java autónomas.
- Saiba como implementar uma aplicação no Cloud Run.
- Saiba como implementar uma aplicação no GKE.
- Saiba como resolver problemas de erros de compilação.