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:
-
Enable the Cloud Build, Cloud Run, and Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. - Para executar os comandos
gcloudnesta página, instale a CLI do Google Cloud. - Tenha o seu projeto Go pronto.
- 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.
- Certifique-se de que conhece o ID da conta de serviço de tempo de execução do Cloud Run.
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:
-
Na Google Cloud consola, aceda à página settings Autorizações do Cloud Build:
Aceda ao menu Conta de serviço e selecione a sua conta de serviço
cloud-build-go.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.- No painel Atribuir função de utilizador da conta de serviço, selecione a conta de serviço de tempo de execução e, de seguida, clique em Conceder autorização. Esta configuração permite que a sua conta de serviço do Cloud Build personalizada se faça passar pela conta de serviço de tempo de execução quando interage com o serviço gerido do Cloud Run. Para mais informações, consulte o artigo Configure a representação da conta de serviço do Cloud Build para serviços geridos.
- 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.
- Administrador do Cloud Run (
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 comogolangpara 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 campoargsde um passo de compilação recebe uma lista de argumentos e transmite-os à imagem referenciada pelo camponame. No exemplo seguinte, o campoargsrecebe 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.lognum 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
Carregar para o Artifact Registry: no ficheiro de configuração, use o campo
goModulespara 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.modno 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çãooptionsno 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.
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.xmlO 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 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.