Nesta página, explicamos como usar o Cloud Build para criar e testar seus aplicativos Go, fazer upload de artefatos para o Artifact Registry, gerar informações de procedência e salvar seus registros de teste no Cloud Storage.
Antes de começar
As instruções nesta página pressupõem que você conhece o Go. Além disso:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- Para executar os comandos
gcloud
nesta página, instale a Google Cloud CLI. - Tenha seu projeto em Go à mão.
- Crie um repositório no Artifact Registry. Se você não tiver um, crie um novo repositório.
- Para armazenar registros de teste no Cloud Storage, crie um bucket no Cloud Storage.
Configurar a conta de serviço
Os exemplos neste documento usam uma conta de serviço especificada pelo usuário. Para criar a conta de serviço usada pelo Cloud Build, execute o seguinte comando na Google Cloud CLI:
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 de computação padrão (usada pelo Cloud Run) precisa ter permissã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 o papel
Usuário 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 e-mail padrão da conta de serviço de computação impresso pelo comando
anterior.
configure as permissões do IAM
Verifique se você tem as permissões necessárias:
Para receber as permissões necessárias para executar builds no Cloud Build,
peça ao administrador para conceder a você o
papel do IAM de conta de serviço do Cloud Build (roles/cloudbuild.builds.builder
) na sua conta de serviço do build.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Para receber as permissões necessárias para armazenar artefatos criados no Artifact Registry,
peça ao administrador para conceder a você o
Gravador do Artifact Registry (roles/artifactregistry.writer
) do IAM na sua conta de serviço de build.
Para receber as permissões necessárias para armazenar registros de teste no Logging,
peça ao administrador para conceder a você o
papel do IAM de Criador de objetos do Storage (roles/storage.objectCreator
) na sua conta de serviço de build.
Para receber as permissões necessárias para implantar o aplicativo no Cloud Run,
peça ao administrador para conceder a você o
papel do IAM de Desenvolvedor do Cloud Run (roles/run.developer
) na conta de serviço de build.
Configurar builds do Go
A imagem pública
golang
do Docker Hub
oferece suporte à criação de módulos do Go.
Usar essa imagem como uma etapa de build no arquivo de configuração do Cloud Build permite
invocar comandos go
na imagem. Os argumentos transmitidos para essa etapa de build
são transmitidos diretamente para a ferramenta golang
, permitindo que você execute qualquer comando go
nesta imagem.
Esta seção mostra como criar um exemplo de arquivo de configuração de build para um app Go no repositório Git cloud-build-samples. O arquivo de configuração de build tem etapas para criar o app, adicionar testes de unidade e, após a aprovação, implantar o app.
Para criar o exemplo de aplicativo Go:
Configurar testes de unidade: se você definiu testes de unidade no aplicativo, configure o Cloud Build para executar os testes adicionando os seguintes campos em uma etapa de build:
name
: defina o valor desse campo comogolang
para usar a imagem golang do Docker Hub na tarefa.entrypoint
: defina o valor desse campo como/bin/bash
. Isso permite que você execute comandos bash de várias linhas diretamente na etapa de build.args
: o campoargs
de uma etapa de criação recebe uma lista de argumentos e os passa para a imagem referenciada pelo camponame
. No exemplo a seguir, o campoargs
usa os argumentos para:- Executar o formatador de registros de teste para fazer o download da saída do registro de teste.
- Imprimir a saída do registro.
- Salvando os resultados do teste em
sponge.log
. Resultados em
sponge.log
para um arquivo XML JUNIT. O nome do arquivo XML JUNIT é construído usando a versão curta do ID de confirmação associado ao seu build. Uma próxima etapa de build vai salvar os registros nesse arquivo 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
Fazer upload no Artifact Registry: no arquivo de configuração, use o campo
goModules
para especificar o caminho do aplicativo 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 repositório do Go no Artifact Registry.
- location: o local do repositório no Artifact Registry.
- projectId: o ID do projeto Google Cloud que contém o repositório do Artifact Registry.
- sourcePath: o caminho para o arquivo
go.mod
no espaço de trabalho do build. - appPath: o caminho para o aplicativo empacotado.
- version: o número da versão do aplicativo, formatado com números e pontos, como
v1.0.1
.
Opcional: ativar a geração de origem
O Cloud Build pode gerar metadados de procedência verificáveis de Níveis da cadeia de suprimentos para artefatos de software (SLSA) para ajudar a proteger seu pipeline de integração contínua.
Para ativar a geração de procedência, adicione
requestedVerifyOption: VERIFIED
à seçãooptions
no arquivo de configuração.Depois que o build for concluído, você poderá acessar os detalhes do repositório no Artifact Registry.
Também é possível acessar os metadados de procedência do build e validar a procedência.
Salvar registros de teste no Cloud Storage: é possível configurar o Cloud Build para armazenar todos os registros de teste no Cloud Storage especificando um local e um caminho do bucket existente para os registros de teste.
A etapa de criação a seguir armazena os registros de teste que você salvou no arquivo XML JUNIT em um bucket do Cloud Storage:
# Save test logs to Google Cloud Storage artifacts: objects: location: gs://$_BUCKET_NAME/ paths: - ${SHORT_SHA}_test_log.xml
O snippet a seguir mostra o arquivo de configuração da compilação completo para as etapas 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' repositoryProject_id: 'projectId' sourcePath: 'sourcePath' modulePath: 'appPath' moduleVersion: 'version'
Inicie o build usando a CLI gcloud ou crie um gatilho de build:
Google Cloud CLI
gcloud builds submit --region=us-west2 --config=cloudbuild.yaml \
--substitutions=_AR_REPO_NAME="AR_REPO_NAME"
Gatilhos de compilação
Siga as etapas em Criar um acionador de build. No campo Variáveis de substituição, você também precisa informar o nome do repositório do Artifact Registry e o nome do bucket do Cloud Storage para registros de teste.
A seguir
- Saiba como realizar implantações azul-verde no Compute Engine.
- Saiba como resolver erros de build.