O Cloud Build pode notificá-lo sobre atualizações de criação enviando notificações para os canais pretendidos, como o Slack ou seu servidor SMTP. Esta página explica como configurar notificações usando o notificador SMTP.
Antes de começar
-
Enable the Cloud Build, Compute Engine, Cloud Run, Pub/Sub, and Secret Manager APIs.
- Instale o Google Cloud CLI.
Como configurar notificações por e-mail
Para enviar notificações por e-mail, você precisará de um servidor SMTP em execução e acesso a uma conta nesse servidor, incluindo o nome de usuário e a senha da conta que será usada para enviar notificações. Você pode usar qualquer servidor SMTP existente, mas
vão precisar de acesso ao nome do servidor e à porta. Por exemplo, o nome do servidor
O Gmail está smtp.gmail.com
, e a porta é 587
. Verifique se o SMTP
cotas de entrega do servidor podem lidar com o volume de e-mail que você espera gerar.
A seção a seguir explica como configurar manualmente as notificações por e-mail usando o notificador do SMTP. Se você quiser automatizar a configuração, consulte Como automatizar a configuração de notificações.
Para configurar notificações por e-mail:
Armazene a senha da conta de e-mail do remetente no Secret Manager. Para o Gmail, você precisará usar a senha de app em vez da senha de login da conta.
Abra a página do Secret Manager no console do Google Cloud:
Clique em Criar secret.
Insira um nome para o secret.
Em Valor do secret, adicione a senha da conta de e-mail do remetente.
Para salvar o secret, clique em Criar secret.
Embora a conta de serviço do Cloud Run possa ter o papel de Editor para o projeto, o papel Editor não é suficiente para acessar o secret no Secret Manager. Você precisará conceder acesso ao secret à sua conta de serviço do Cloud Run:
Acesse a página "IAM" no Console do Google Cloud.
Localize a conta de serviço padrão do Compute Engine associada ao projeto:
Sua conta de serviço padrão do Compute Engine será semelhante a esta:
project-number-compute@developer.gserviceaccount.com
Anote a conta de serviço padrão do Compute Engine.
Abra a página do Secret Manager no console do Google Cloud:
Clique no nome do secret que contém o secret do senha da conta de e-mail.
Na guia Permissões, clique em Adicionar membro.
Adicione a conta de serviço padrão do Compute Engine associada ao projeto como membro.
Selecione como papel a permissão Acessador de secrets do Gerenciador de secrets.
Clique em Salvar.
Conceda permissão à conta de serviço do Cloud Run para leitura Buckets do Cloud Storage:
Acesse a página "IAM" no Console do Google Cloud.
Localize a conta de serviço padrão do Compute Engine associada ao seu projeto:
Sua conta de serviço padrão do Compute Engine será semelhante a esta:
project-number-compute@developer.gserviceaccount.com
Clique no ícone de lápis na linha que contém sua conta de serviço padrão do Compute Engine. A guia Editar acesso vai aparecer.
Clique em Adicionar outro papel.
Adicione o seguinte papel:
- Leitor de objetos do Storage
Clique em Salvar.
Grave um arquivo de configuração do notificador para configurar o notificador SMTP e filtrar os eventos de build:
No exemplo de arquivo de configuração do notificador de exemplo, o campo
filter
usa Common Expression Language com a variável disponível,build
, para filtrar os eventos de build com um statusSUCCESS
:apiVersion: cloud-build-notifiers/v1 kind: SMTPNotifier metadata: name: example-smtp-notifier spec: notification: filter: build.status == Build.Status.SUCCESS params: buildStatus: $(build.status) delivery: server: server-host-name port: "port" sender: sender-email from: from-email recipients: - recipient-email # optional: more emails here password: secretRef: smtp-password template: type: golang uri: gs://example-gcs-bucket/smtp.html secrets: - name: smtp-password value: projects/project-id/secrets/secret-name/versions/latest
Em que:
buildStatus
é um parâmetro definido pelo usuário. Esse parâmetro assume o valor de $(build.status), o status do build.server-host-name
é o endereço do seu servidor SMTP.port
é a porta que processará as solicitações de SMTP. Esse valor precisa ser especificado como uma string.sender-email
é o endereço de e-mail da conta do remetente que é vista pelo server-host-name especificado.from-email
é o endereço de e-mail visto pelos destinatários.recipient-email
é uma lista de um ou mais endereços de e-mail para receber mensagens do remetente.smtp-password
é a variável de configuração usada neste exemplo para fazer referência à senha da conta de e-mail do remetente armazenada no Gerenciador de secrets. O nome da variável especificado aqui precisa corresponder ao camponame
emsecrets
.project-id
é o ID do seu projeto do Google Cloud.secret-name
é o nome do secret que contém a senha da conta de e-mail do remetente.O campo
uri
faz referência ao arquivosmtp.html
. Esse arquivo se refere a um modelo HTML hospedado no Cloud Storage e representa seu e-mail de notificação.
Para ver o exemplo, consulte o arquivo de configuração do notificador para o notificador SMTP.
Para ver outros campos que podem ser filtrados, consulte o recurso Build. Para ver mais exemplos de filtragem, consulte Como usar a CEL para filtrar eventos do build.
Faça o upload do arquivo de configuração do notificador em um bucket do Cloud Storage:
Se você não tiver um bucket do Cloud Storage, execute o comando a seguir para crie um bucket em que
bucket-name
é o nome que você quer dar ao seu bucket, sujeito a requisitos de nomenclatura.gcloud storage buckets create gs://bucket-name/
Faça o upload do arquivo de configuração do notificador para o bucket:
gcloud storage cp config-file-name gs://bucket-name/config-file-name
Onde:
bucket-name
é o nome do bucket.config-file-name
é o nome do seu arquivo de configuração.
Implante o notificador no Cloud Run.
gcloud run deploy service-name \ --image=us-east1-docker.pkg.dev/gcb-release/cloud-build-notifiers/smtp:latest \ --update-env-vars=CONFIG_PATH=config-path,PROJECT_ID=project-id
Onde:
service-name
é o nome do serviço do Cloud Run em que você está implantando a imagem;config-path
é o caminho para o arquivo de configuração do notificador do notificador de SMTP,gs://bucket-name/config-file-name
.project-id
é o ID do seu projeto do Google Cloud.
O comando
gcloud run deploy
extrai a versão mais recente da imagem hospedada do Registro de artefatos de propriedade do Cloud Build. O Cloud Build oferece suporte a imagens do notificador por nove meses. Após nove meses, o Cloud Build exclui a versão da imagem. Se quiser usar uma versão de imagem anterior, você precisará especificar a versão semântica completa da tag de imagem no atributoimage
do seu comandogcloud run deploy
. Versões e tags de imagem anteriores podem ser encontradas no Artifact Registry.Conceda permissões do Pub/Sub para criar tokens de autenticação no seu projeto:
gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:service-project-number@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Em que:
project-id
é o ID do seu projeto do Google Cloud.project-number
é o número do projeto do Google Cloud.
Crie uma conta de serviço para representar sua identidade de assinatura do Pub/Sub:
gcloud iam service-accounts create cloud-run-pubsub-invoker \ --display-name "Cloud Run Pub/Sub Invoker"
Você pode usar
cloud-run-pubsub-invoker
ou um nome exclusivo no seu projeto do Google Cloud.Conceda à conta de serviço
cloud-run-pubsub-invoker
a permissãoInvoker
do Cloud Run:gcloud run services add-iam-policy-binding service-name \ --member=serviceAccount:cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com \ --role=roles/run.invoker
Em que:
service-name
é o nome do serviço do Cloud Run em que você está implantando a imagem;project-id
é o ID do seu projeto do Google Cloud.
Crie o tópico
cloud-builds
para receber mensagens de atualização da build para seu notificador:gcloud pubsub topics create cloud-builds
Crie um assinante de push do Pub/Sub para seu notificador:
gcloud pubsub subscriptions create subscriber-id \ --topic=cloud-builds \ --push-endpoint=service-url \ --push-auth-service-account=cloud-run-pubsub-invoker@project-id.iam.gserviceaccount.com
Em que:
subscriber-id
é o nome que você quer dar à sua assinatura.service-url
é o URL gerado pelo Cloud Run para o novo serviço.project-id
é o ID do seu projeto do Google Cloud.
Agora as notificações do seu projeto do Cloud Build estão configuradas. Na próxima vez que invocar um build, o recipients
especificado receberá um e-mail com uma notificação caso o build corresponda ao filtro que você configurou.
Como usar a CEL para filtrar eventos de build
O Cloud Build usa a CEL com a variável build
nos campos
listados no recurso Build
para acessar os campos associados ao evento de build, como o
ID do gatilho, a lista de imagens ou os valores de substituição. Use a string filter
para filtrar eventos de build no arquivo de configuração do build usando
qualquer campo listado no recurso
Build. Para encontrar a sintaxe exata associada ao seu campo, consulte a
cloudbuild.proto
.
Como filtrar por ID do acionador
Para filtrar por ID de gatilho, especifique o valor do ID do gatilho no campo filter
usando build.build_trigger_id
, em que trigger-id
é
o ID do gatilho como uma string:
filter: build.build_trigger_id == trigger-id
Como filtrar por status
Para filtrar por status, especifique o status do build que você quer filtrar no
campo filter
usando build.status
.
O exemplo a seguir mostra como filtrar eventos de build com um status SUCCESS
usando o campo filter
:
filter: build.status == Build.Status.SUCCESS
Também é possível filtrar builds com status variados. O exemplo a seguir mostra
como filtrar eventos de build com um status SUCCESS
, FAILURE
ou
TIMEOUT
usando o campo filter
:
filter: build.status in [Build.Status.SUCCESS, Build.Status.FAILURE, Build.Status.TIMEOUT]
Para ver valores de status adicionais pelos quais você pode filtrar, consulte Status na referência do recurso do Build.
Como filtrar por tag
Para filtrar por tag, especifique o valor da tag no campo filter
usando build.tags
, em que tag-name
é
o nome da tag:
filter: tag-name in build.tags
É possível filtrar com base no número de tags especificadas no evento de build
usando size
. No exemplo a seguir, o campo filter
filtra
eventos de build que têm exatamente duas tags especificadas, uma delas como
v1
:
filter: size(build.tags) == 2 && "v1" in build.tags
Como filtrar por imagens
Para filtrar por imagens, especifique o valor da sua imagem no campo filter
usando build.images
, em que image-name
é o nome completo
da imagem conforme listado no Artifact Registry, como
us-east1-docker.pkg.dev/my-project/docker-repo/image-one
:
filter: image-name in build.images
No exemplo a seguir, o filter
filtra eventos de build com
us-east1-docker.pkg.dev/my-project/docker-repo/image-one
ou
us-east1-docker.pkg.dev/my-project/docker-repo/image-two
especificados como
nomes de imagem:
filter: "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images || "us-east1-docker.pkg.dev/my-project/docker-repo/image-one" in build.images
Como filtrar por tempo
É possível filtrar eventos de build com base no tempo de criação, horário de início ou
horário de término de um build especificando uma das seguintes opções no campo
filter
: build.create_time
, build.start_time
ou build.finish_time
.
No exemplo a seguir, o campo filter
usa timestamp
para filtrar
eventos de build com um horário de solicitação para criar o build em 20 de julho de 2020, às 6h:
filter: build.create_time == timestamp("2020-07-20:T06:00:00Z")
Também é possível filtrar eventos de build por comparações de tempo. No exemplo a seguir,
o campo filter
usa timestamp
para filtrar eventos de versão com um horário de início
entre 6 de julho de 2020, às 6h, e 30 de julho de 2020, às 6h.
filter: timestamp("2020-07-20:T06:00:00Z") >= build.start_time && build.start_time <= timestamp("2020-07-30:T06:00:00Z")
Para saber mais sobre como os fusos horários são expressos em CEL, consulte a definição de linguagem para fusos horários.
Para filtrar por duração de um build, use duration
para comparar carimbos de data/hora.
No exemplo a seguir, o campo filter
usa duration
para filtrar
eventos de build com um build executado por pelo menos cinco minutos:
filter: build.finish_time - build.start_time >= duration("5m")
Como filtrar por substituição
É possível filtrar por substituição especificando a variável de substituição no campo filter
usando build.substitutions
. No exemplo a seguir,
o campo filter
lista versões que contêm a variável de substituição
substitution-variable e verifica se o substitution-variable corresponde ao substitution-value especificado:
filter: build.substitutions[substitution-variable] == substitution-value
Em que:
substitution-variable
é o nome da variável de substituição.substitution-value
é o nome do valor de substituição.
Também é possível filtrar por padrão os valores das variáveis de substituição. No exemplo a seguir, o campo filter
lista os builds que têm o nome da ramificação master
e os builds que têm o nome de repositório github.com/user/my-example-repo
. As variáveis de substituição padrão BRANCH_NAME
e REPO_NAME
são transmitidas como chaves para o build.substitutions
:
filter: build.substitutions["BRANCH_NAME"] == "master" && build.substitutions["REPO_NAME"] == "github.com/user/my-example-repo"
Se você quiser filtrar strings usando expressões regulares, use a
função integrada matches
. No exemplo abaixo, o campo filter
filtra as
criações com status FALHA ou TEMPO LIMITE e também tem uma variável de
substituição de versão TAG_NAME
com um valor correspondente à expressão regular
v{DIGIT}.{DIGIT}.{3 DIGITS})
filter: build.status in [Build.Status.FAILURE, Build.Status.TIMEOUT] && build.substitutions["TAG_NAME"].matches("^v\\d{1}\\.\\d{1}\\.\\d{3}$")
Para ver uma lista de valores de substituição padrão, consulte Como usar substituições padrão.
A seguir
- Saiba mais sobre os notificadores do Cloud Build.
- Saiba como se inscrever para criar notificações.
- Saiba como gravar um arquivo de configuração da compilação do Cloud Build.