Criar, testar e conteinerizar aplicativos Java

Nesta página, explicamos como usar o Cloud Build para criar, testar e conteinerizar aplicativos baseados em Java, fazer upload de imagens de contêiner para o Artifact Registry e gerar procedência do build.

Antes de começar

Como usar a imagem maven ou gradle

É possível configurar o Cloud Build para criar aplicativos Java usando o Imagem maven ou a imagem gradle usando o Docker Hub.

maven

Para executar suas tarefas na imagem maven, adicione uma etapa à configuração do build com os seguintes campos:

  • name: defina o valor desse campo como maven ou maven:<tag>, em que a tag representa a versão. Se você não especificar a tag de imagem, o Cloud Build usará a imagem latest por padrão.
  • entrypoint: a definição deste campo modifica o ponto de entrada padrão do imagem referenciada em name. Defina o valor deste campo como mvn para invocar mvn como o ponto de entrada da etapa de build e execute comandos mvn.
  • args: o campo args de uma etapa de criação recebe uma lista de argumentos e os passa para a imagem referenciada pelo campo name.

A etapa de build a seguir especifica o objeto entrypoint para a imagem maven. marcado como 3.3-jdk-8 e exibe a versão da ferramenta de build:

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

gradle

Para executar suas tarefas na imagem gradle, adicione uma etapa à configuração do build com os seguintes campos:

  • name: defina o valor deste campo como gradle ou gradle:<tag>, em que o representa a versão. Se você não especificar a tag de imagem, o Cloud Build usará a imagem latest por padrão.
  • entrypoint: a definição deste campo modifica o ponto de entrada padrão do imagem referenciada em name. Defina o valor deste campo como gradle para invocar gradle como o ponto de entrada da etapa de build e execute comandos gradle.
  • args: o campo args de uma etapa de criação recebe uma lista de argumentos e os passa para a imagem referenciada pelo campo name.

A etapa de build a seguir especifica o entrypoint para a imagem gradle marcada como 5.6.2-jdk8 e imprime a versão da ferramenta de build:

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

Como configurar builds Java

  1. No diretório raiz do projeto, crie um arquivo de configuração de build chamado cloudbuild.yaml.

  2. Execute testes: maven e gradle fornecem maven test e gradle test, que fazem download de dependências, criam os aplicativos e executam quaisquer testes especificados no código-fonte. O campo args de uma etapa de criação recebe uma lista de argumentos e os transmite para a imagem referenciada pelo campo name.

    No seu arquivo de configuração de build, 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 o aplicativo: para empacotar o aplicativo em um arquivo JAR para a imagem maven, especifique o comando package no campo args. O comando package cria um arquivo JAR em /workspace/target/.

    Para empacotar o aplicativo em um arquivo JAR para a imagem gradle, especifique o comando assemble no campo args. O comando assemble cria um arquivo JAR em workspace/build/libs.

    A etapa de criação a seguir empacota seu aplicativo 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. Conteinerizar aplicativo: o Cloud Build oferece uma imagem do Docker pré-criada que pode ser usado para conteinerizar seu aplicativo Java. Para contentorizar o aplicativo Java, no arquivo de configuração de build:

    • Adicione um campo name e especifique a imagem do Docker pré-criada em gcr.io/cloud-builders/docker.
    • Adicione um campo args e especifique os argumentos build, incluindo o nome a imagem do contêiner a ser criada e o caminho para o artefato de compilação.
    • Adicione um campo images para enviar a imagem do contêiner criado ao Artifact Registry.
    • Opcional: adicionar requestedVerifyOption: VERIFIED no campo options do arquivo de configuração de build para ativar Níveis da cadeia de suprimentos para artefatos de software (SLSA) geração de procedência.

    A etapa de build a seguir conteineriza o aplicativo e envia o contêiner imagem para o Artifact Registry e gera informações de procedência do build:

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

    Em que:

    • location: o local regional ou multirregional do seu repositório.
    • project-id: o ID do seu projeto do Google Cloud.
    • repository: o nome do repositório do Artifact Registry.
    • image: o nome da imagem do contêiner.
    • build-artifact: o nome do arquivo JAR criado na etapa de versão.
  5. Inicie o build: quando o arquivo de configuração de build estiver pronto, inicie o build digitando o seguinte comando no terminal:

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

    Em que:

    • config-file-path: o caminho para o arquivo de configuração da versão. Neste exemplo, o arquivo de configuração de build é denominado cloudbuild.yaml;
    • source-directory: o caminho ou o URL do código-fonte.
    • REGION: uma das regiões de build com suporte.

    Se você não especificar config-file-path e source-directory no comando gcloud builds submit, o Cloud Build presumirá que o arquivo de configuração e o código-fonte estão no diretório de trabalho atual.

    Depois que o build for concluído, você poderá acessar os detalhes do repositório no Artifact Registry.

    Também é possível conferir os metadados da procedência do build e validar a procedência.

Exemplos de código

Aqui estão alguns repositórios de exemplo que podem ser usados para criar aplicativos Java, cada um contendo um aplicativo de amostra e um arquivo de configuração de build para construir e testar esse aplicativo:

  • maven-example: um aplicativo Java e um exemplo de arquivo de configuração de build para criar e testar o aplicativo com mvn.
  • gradle-example: um aplicativo Java e um exemplo de arquivo de configuração de build para criar e testar o aplicativo com gradle.

A seguir