Crie e teste aplicações Go

Esta página explica como usar o Cloud Build para criar e testar as suas aplicações Go, carregar os seus artefactos para o Artifact Registry, gerar informações de proveniência e guardar os seus registos de testes no Cloud Storage.

Antes de começar

As instruções nesta página pressupõem que tem conhecimentos sobre o Go. Além disso:

Crie uma conta de serviço do Cloud Build personalizada

Crie uma conta de serviço do Cloud Build personalizada executando o seguinte comando na CLI do Google Cloud:

  gcloud iam service-accounts create cloud-build-go \
  --description="Build and test Go applications" \
  --display-name="Cloud Build Go" \
  --project="PROJECT_NAME"

Vai usar esta conta de serviço para criar e testar a sua aplicação Go.

Configure as autorizações de IAM

Para configurar a nova conta de serviço com as autorizações necessárias para criar e implementar aplicações Go, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Autorizações do Cloud Build:

    Aceda a Autorizações

  2. Aceda ao menu Conta de serviço e selecione a sua conta de serviço cloud-build-go.

  3. Defina o estado das seguintes funções como Ativado:

    • Administrador do Cloud Run (roles/run.admin): permite que o Cloud Build implemente novos serviços no Cloud Run.
    • Administrador de armazenamento (roles/storage.admin): permite a leitura e a escrita a partir do Cloud Storage.
    • Escritor do Artifact Registry (roles/artifactregistry.writer): permite extrair imagens do Artifact Registry e escrever no mesmo.
    • Escritor de registos (roles/logging.logWriter): permite que as entradas de registo sejam escritas no Cloud Logging.
    • Editor do Cloud Build (roles/cloudbuild.builds.editor): permite que a sua conta de serviço execute compilações.

Configure compilações Go

A imagem golang pública do Docker Hub suporta a criação com módulos Go. A utilização desta imagem como um passo de compilação no ficheiro de configuração do Cloud Build permite-lhe invocar comandos go na imagem. Os argumentos transmitidos a este passo de compilação são transmitidos diretamente à ferramenta golang, o que lhe permite executar qualquer comando go nesta imagem.

Esta secção mostra como criar um ficheiro de configuração de compilação de exemplo para uma app Go a partir do repositório Git cloud-build-samples. O ficheiro de configuração de compilação tem passos para compilar a app, adicionar testes unitários e, depois de os testes serem aprovados, implementar a app.

Para criar a aplicação Go de exemplo:

  1. Configure testes unitários: se tiver definido testes unitários na sua aplicação, pode configurar o Cloud Build para executar os testes adicionando os seguintes campos num passo de compilação:

    • name: defina o valor deste campo como golang para usar a imagem golang do Docker Hub para a sua tarefa.
    • entrypoint: defina o valor deste campo como /bin/bash. Isto permite-lhe executar comandos bash de várias linhas diretamente a partir do passo de compilação.
    • args: o campo args de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo campo name. No exemplo seguinte, o campo args recebe os argumentos para:

      • Executar o formatador de registo de teste para transferir a saída do registo de teste.
      • Imprimir o resultado do registo.
      • A guardar os resultados dos testes em sponge.log.
      • Produzir os resultados em sponge.log num ficheiro XML JUNIT. O nome do ficheiro XML JUNIT é criado com a versão abreviada do ID de commit associado à sua compilação. Um passo de compilação subsequente guarda os registos neste ficheiro no Cloud Storage.

        steps:
          # Run tests and save to file
          - name: golang:1.23
            entrypoint: /bin/bash
            args:
              - -c
              - |
                go install github.com/jstemmer/go-junit-report/v2@latest
                2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
        
  2. Carregar para o Artifact Registry: no ficheiro de configuração, use o campo goModules para especificar o caminho da aplicação e o repositório Go no Artifact Registry:

    # Upload Go module to artifact registry
    artifacts:
      goModules:
        - repositoryName: 'repositoryName'
          repositoryLocation: 'location'
          repositoryProjectId: 'projectId'
          sourcePath: 'sourcePath'
          modulePath: 'appPath'
          moduleVersion: 'version'
    

    Substitua os seguintes valores:

    • repositoryName: o nome do seu repositório Go no Artifact Registry.
    • location: a localização do seu repositório no Artifact Registry.
    • projectId: o ID do Google Cloud projeto que contém o seu repositório do Artifact Registry.
    • sourcePath: o caminho para o ficheiro go.mod no espaço de trabalho da compilação.
    • appPath: o caminho para a sua aplicação comprimida.
    • version: o número da versão da sua aplicação, formatado em números e pontos, como v1.0.1.
  3. Opcional: ative a geração de proveniência

    O Cloud Build pode gerar metadados de proveniência de compilação Supply chain Levels for Software Artifacts (SLSA) validáveis para ajudar a proteger a sua pipeline de integração contínua.

    Para ativar a geração de proveniência, adicione requestedVerifyOption: VERIFIED à secção options no seu ficheiro de configuração.

    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.

  4. Guardar registos de testes no Cloud Storage: pode configurar o Cloud Build para armazenar quaisquer registos de testes no Cloud Storage especificando uma localização e um caminho de contentor existentes para os registos de testes.

    O seguinte passo de compilação armazena os registos de testes que guardou no ficheiro XML JUNIT num contentor do Cloud Storage:

    # Save test logs to Google Cloud Storage
    artifacts:
      objects:
        location: gs://$_BUCKET_NAME/
        paths:
          - ${SHORT_SHA}_test_log.xml
    

    O fragmento seguinte mostra o ficheiro de configuração de compilação completo para os passos anteriores:

      steps:
        # Run tests and save to file
        - name: golang:1.23
          entrypoint: /bin/bash
          args:
            - -c
            - |
              go install github.com/jstemmer/go-junit-report/v2@latest
              2>&1 go test -timeout 1m -v ./... | /go/bin/go-junit-report -set-exit-code -iocopy -out ${SHORT_SHA}_test_log.xml
    
      # Store golang modules in Google Artifact Registry
      artifacts:
        goModules:
          - repositoryName: 'repositoryName'
            repositoryLocation: 'location'
            repositoryProjectId: 'projectId'
            sourcePath: 'sourcePath'
            modulePath: 'appPath'
            moduleVersion: 'version'
    
  5. Inicie a compilação através da CLI gcloud ou crie um acionador de compilação:

CLI do Google Cloud

 gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
     --substitutions=_AR_REPO_NAME="AR_REPO_NAME"

Acionadores de versão

Siga os passos em Crie um acionador de compilação. No campo Variáveis de substituição, também tem de indicar o nome do repositório do Artifact Registry e o nome do contentor do Cloud Storage para registos de teste.

O que se segue?