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 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:

Configure a conta de serviço

Os exemplos neste documento usam uma conta de serviço especificada pelo utilizador. Para criar a conta de serviço usada pelo Cloud Build, execute 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_ID"

A conta de serviço predefinida do Compute (usada pelo Cloud Run) precisa de autorização para atuar como a nova conta de serviço. Primeiro, determine o nome da conta de serviço de computação no seu projeto:

gcloud iam service-accounts list --filter="email:-compute@developer.gserviceaccount.com"

Em seguida, conceda a função Utilizador da conta de serviço (roles/iam.serviceAccountUser):

gcloud iam service-accounts add-iam-policy-binding \
COMPUTE_SERVICE_ACCOUNT_EMAIL  \
--member="serviceAccount:cloud-build-go@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/iam.serviceAccountUser"

Substitua COMPUTE_SERVICE_ACCOUNT_EMAIL pelo endereço de email da conta de serviço de computação predefinida impresso pelo comando anterior.

Configure as autorizações de IAM

Certifique-se de que tem as autorizações de que precisa:

Para receber as autorizações de que precisa para realizar compilações no Cloud Build, peça ao seu administrador para lhe conceder a conta de serviço do Cloud Build (roles/cloudbuild.builds.builder) função do IAM na sua conta de serviço de compilação. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Para receber as autorizações de que precisa para armazenar artefactos criados no Artifact Registry, peça ao seu administrador para lhe conceder a função do IAM Gravador do Artifact Registry (roles/artifactregistry.writer) na sua conta de serviço de compilação.

Para receber as autorizações de que precisa para armazenar registos de testes no Logging, peça ao seu administrador que lhe conceda a função criador de objetos de armazenamento (roles/storage.objectCreator) do IAM na sua conta de serviço de compilação.

Para obter as autorizações de que precisa para implementar a aplicação no Cloud Run, peça ao administrador para lhe conceder a função de IAM de programador do Cloud Run (roles/run.developer) na sua conta de serviço de compilação.

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 armazenamento na nuvem.

        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. Guarde 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 os registos de teste.

O que se segue?