Crie, teste e contentorize aplicações Java

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

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 como maven ou maven:<tag>, em que a etiqueta representa a versão. Se não especificar a etiqueta de imagem, o Cloud Build usa a imagem latest por predefinição.
  • entrypoint: a definição deste campo substitui o ponto de entrada predefinido da imagem referenciada em name. Defina o valor deste campo como mvn para invocar mvn como o ponto de entrada da etapa de compilação e executar comandos mvn.
  • args: o campo args de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo campo name.

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 como gradle ou gradle:<tag>, em que a etiqueta representa a versão. Se não especificar a etiqueta de imagem, o Cloud Build usa a imagem latest por predefinição.
  • entrypoint: a definição deste campo substitui o ponto de entrada predefinido da imagem referenciada em name. Defina o valor deste campo como gradle para invocar gradle como o ponto de entrada da etapa de compilação e executar comandos gradle.
  • args: o campo args de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo campo name.

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

  1. No diretório raiz do projeto, crie um ficheiro de configuração de compilação denominado cloudbuild.yaml.

  2. Executar testes: maven e gradle fornecem maven test e gradle test, que transfere dependências, cria as aplicações e executa todos os testes especificados no seu código-fonte. O campo args de um passo de compilação usa uma lista de argumentos e transmite-os à imagem referenciada pelo campo name.

    No ficheiro de configuração de compilação, adicione test ao campo args para invocar test em 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. Empacote a aplicação: para empacotar a aplicação num ficheiro JAR para a sua imagem maven, especifique o comando package no campo args. O comando package 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 comando assemble no campo args. O comando assemble cria um ficheiro JAR em workspace/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']
    
  4. 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 em gcr.io/cloud-builders/docker.
    • Adicione um campo args e especifique os argumentos build, 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 campo options 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.
  5. 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.

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?