O Cloud Build pode notificar você sobre atualizações no status do build enviando notificações para canais selecionados. Além dos notificadores mantidos pelo Cloud Build, como Slack ou SMTP, você também pode usar a biblioteca fornecida no repositório cloud-build-notifiers para criar seu próprio notificador.
Nesta página, explicamos como criar seu próprio notificador.
Antes de começar
Ative as APIs Cloud Build, Cloud Run, Pub/Sub e Secret Manager, se alguma delas ainda não estiver ativada.
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o papel de Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.
Instale a linguagem de programação Go.
Instale a CLI do Google Cloud.
Configuração
Abra uma janela de terminal na sua máquina.
Clone e navegue até o repositório cloud-build-notifiers:
git clone https://github.com/GoogleCloudPlatform/cloud-build-notifiers.git && cd cloud-build-notifiersAdicione um diretório para seu próprio notificador e navegue até ele, em que DIRECTORY_NAME é o nome do diretório:
mkdir DIRECTORY_NAME && cd DIRECTORY_NAMEInicialize os módulos do Go no novo diretório, em que DIRECTORY_NAME é o nome do novo diretório:
go mod init github.com/GoogleCloudPlatform/cloud-build-notifiers/DIRECTORY_NAMEAgora você verá um arquivo
go.modno diretório.Adicione a seguinte linha ao arquivo
go.modpara garantir que você esteja usando a versão mais recente dos notificadores:replace github.com/GoogleCloudPlatform/cloud-build-notifiers/lib/notifiers => ../
Suas dependências agora estão configuradas e você está pronto para criar seu próprio notificador.
Como criar seu próprio notificador
O cloud-build-notifiers contém um diretório lib/notifiers. No diretório lib/notifiers, você verá um arquivo chamado notifier.go. Esse
arquivo contém o framework que pode ser usado para criar seu próprio notificador.
Será necessário definir dois métodos para criar um notificador no arquivo principal.
No novo diretório, crie um arquivo chamado
main.go.Em
main.go, importe o framework da biblioteca do notificador e outras dependências:Defina um método principal para o notificador. Neste exemplo,
loggeré o nome do notificador:O
mainusa oMaindefinido no arquivonotifier.go, que é usado para configurar binários de notificação.Defina uma estrutura para o notificador, em que você definirá as variáveis da interface. Neste exemplo,
loggeré o nome do notificador:Adicione a funcionalidade de notificação. A interface do notificador é definida por dois métodos:
SetUp: o métodoSetUpaceita uma configuração, busca secrets e extrai filtros especificados da configuração, armazenando-os como um predicado da Common Expression Language que pode ser usado para enviar notificações. Para saber mais sobre a CEL, consulte o repositóriocel-spec.SendNotification: o métodoSendNotificationé usado para enviar notificações ao canal ou serviço selecionado.A definição do notificador está disponível em
notifier.goe na documentação do Go.No exemplo a seguir, a interface do notificador é definida usando o método
SetUpeSendNotificationpara imprimir registros de build, comloggercomo o nome do seu notificador:O arquivo
main.gofinal será semelhante ao arquivo a seguir. Neste exemplo,loggeré usado como o nome do notificador.
Em seguida, configure o notificador.
Configurar notificações
Grave um arquivo de configuração do notificador para configurar seu notificador e filtrar eventos de build:
No arquivo de configuração do notificador do exemplo a seguir, o campo
filterusa CEL com a variável disponível,build, para filtrar eventos do build com o statusSUCCESS:Em que:
logging-sampleé o nome do notificador.
Para ver outros campos que podem ser filtrados, consulte o recurso Build. Para outros exemplos de filtragem, consulte Como usar a CEL para filtrar eventos de 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 criar um bucket, em que BUCKET_NAME é o nome que você quer dar ao bucket, sujeito aos 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_NAMEOnde:
BUCKET_NAMEé o nome do bucket.CONFIG_FILE_NAMEé o nome do seu arquivo de configuração.
Crie e implante o notificador:
Crie um Dockerfile para o
logging-sample:Crie e implante o notificador usando o arquivo
cloudbuild.yamla seguir.Em que:
_CONFIG_PATHé o caminho para a configuração do notificador, comogs://BUCKET_NAME/CONFIG_FILE_NAME.yaml.
Para executar o
cloudbuild.yaml, transmita o caminho do notificador como uma variável de substituição.gcloud builds submit . --substitutions=_CONFIG_PATH=gs://BUCKET_NAME/CONFIG_FILE_NAMEConceda 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.serviceAccountTokenCreatorEm que:
PROJECT_IDé o ID do 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"É possível usar
cloud-run-pubsub-invokerou um nome exclusivo no seu projeto Google Cloud .Conceda à conta de serviço
cloud-run-pubsub-invokera permissãoInvokerdo 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.invokerEm que:
SERVICE_NAMEé o nome do serviço do Cloud Run em que você está implantando a imagem;PROJECT_IDé o ID do projeto do Google Cloud .
Crie o tópico
cloud-buildspara receber mensagens de atualização de build do seu notifier:gcloud pubsub topics create cloud-buildsTambém é possível definir um nome de tópico personalizado no arquivo de configuração do build para que as mensagens sejam enviadas ao tópico personalizado. Nesse caso, você criaria um tópico com o mesmo nome personalizado:
gcloud pubsub topics create topic-namePara mais informações, consulte Tópicos do Pub/Sub para notificações de build.
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=SUB_IDENTITY_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
Em que:
+ SUBSCRIBER_ID é o nome que você quer dar à assinatura.
+ SERVICE_URL é o URL gerado pelo Cloud Run para seu novo serviço.
+ PROJECT_ID é o ID do projeto do Google Cloud .
Note: By default, [subscriptions expire after 31 days of inactivity](/pubsub/docs/subscription-overview#lifecycle).
You can adjust or disable the expiration period by including the
[`--expiration-period` flag](/sdk/gcloud/reference/pubsub/subscriptions/create#--expiration-period)
when creating the subscription.
Agora as notificações do seu projeto do Cloud Build estão configuradas. Da próxima vez que você invocar uma build, você receberá uma notificação no seu canal caso a build corresponda ao filtro que você configurou.
Notificações de teste
Para testar as notificações do exemplo usado neste guia, você pode
invocar um build executando o comando gcloud builds submit.
No exemplo a seguir, especificamos success.yaml como o caminho
de configuração. A execução desse comando deve resultar em um build bem-sucedido mínimo. Você também verá uma saída dos seus registros de criação.
gcloud builds submit --no-source --config=success.yaml
Onde success.yaml é:
steps:
- name: busybox
args: ["true"]
No exemplo a seguir, especificamos failure.yaml como o caminho
de configuração. A execução desse comando deve resultar em uma criação com falha. Em vez de ver uma saída dos registros de compilação, você verá uma saída informando que não houve correspondência para os filtros CEL especificados na sua origem.
gcloud builds submit --no-source --config=failure.yaml
Onde failure.yaml é:
steps:
- name: busybox
args: ["false"]
Se você criou um notifier configurado para realizar outra tarefa
além de registrar a saída nos registros de serviço do Cloud Run, também
é possível executar o comando gcloud builds submit para testar as notificações.
Para examinar erros associados à versão, verifique os registros do Cloud Run do seu serviço. Para saber mais, consulte Como visualizar registros no Cloud Run.
A seguir
- Saiba mais sobre os notificadores do Cloud Build.
- Saiba como se inscrever para criar notificações.