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:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
- Para executar os comandos
gcloud
nesta página, instale a CLI do Google Cloud. - Tenha o seu projeto Go à mão.
- Ter um repositório Go no Artifact Registry. Se não tiver um, crie um novo repositório.
- Se quiser armazenar registos de testes no Cloud Storage, crie um contentor no Cloud Storage.
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:
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 comogolang
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 campoargs
de um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo camponame
. No exemplo seguinte, o campoargs
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
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
.
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çãooptions
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.
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'
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?
- Saiba como fazer implementações azul-verde no Compute Engine.
- Saiba como resolver problemas de erros de compilação.