Crie, teste e conteinerize 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 em Java usando a imagem maven ou a imagem gradle do Docker Hub.

Para executar suas tarefas na imagem maven ou gradle, especifique o URL da imagem e o build marcado da imagem no campo name do seu arquivo de configuração de build. Se você não especificar a tag de imagem, o Cloud Build usará a imagem latest por padrão. O Cloud Build inicia a imagem especificada em name usando o ponto de entrada padrão da imagem. Para substituir o ponto de entrada padrão e invocar maven ou gradle como um ponto de entrada, especifique mvn ou gradle no campo entrypoint.

O seguinte arquivo de configuração de build especifica entrypoint para a imagem maven ou gradle e imprime o build da ferramenta de build:

maven

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

gradle

  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 o aplicativo: o Cloud Build fornece uma imagem do Docker predefinida que pode ser usada para conteinerizar o aplicativo Java. Para contentorizar o aplicativo Java, no seu arquivo de configuração de build:

    • Adicione um campo name e especifique a imagem pré-criada do Docker em gcr.io/cloud-builders/docker.
    • Adicione um campo args e especifique os argumentos build, incluindo o nome da imagem do contêiner a ser criada e o caminho para o artefato de build.
    • Adicione um campo images para enviar a imagem do contêiner criada para o Artifact Registry e gerar informações de procedência do build. Se você não usar o campo images, o Cloud Build não registrará as informações de procedência. Por exemplo, se você usar uma etapa docker push do build para fazer upload de imagens para o Artifact Registry, o build não terá informações de procedência associadas.

    A etapa de build a seguir conteineriza seu aplicativo e envia a imagem do contêiner para o Artifact Registry, gerando 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 Artifact Registry.
    • image: o nome da imagem do contêiner.
    • build-artifact: o nome do arquivo JAR criado na etapa de versão.
  5. Opcional: ativar a procedência para builds regionais

    Se você estiver usando um build regional, adicione o campo requestedVerifyOption no options no arquivo de configuração do build. Defina o valor como VERIFIED para ativar a geração de metadados de procedência. Se você não adicionar requestedVerifyOption: VERIFIED, o Cloud Build vai gerar procedência apenas para builds globais.

    options:
      requestedVerifyOption: VERIFIED
    
  6. 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 compatíveis.

    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.

    Quando o build for concluído, será possível acessar os detalhes do repositório no Artifact Registry.

    Também é possível conferir os metadados de procedência do build e a validação para ajudar a proteger sua cadeia de suprimentos de software.

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