Configurando Notificacoes
O Runner envia notificacoes de deploy via Telegram, Discord ou ambos simultaneamente, alem de gravar um audit trail em JSON Lines.
Arquitetura v1.4.0
A partir da v1.4.0, o pipeline usa o NotifyManager v2 com suporte a multiplos canais:
config.yml (notify:)
|
v
NotifyManager
|
+----+----+----+
| | |
Telegram Discord StructuredLog
(HTTP) (HTTP) (deploy-events.jsonl)Canais ativados automaticamente:
- Telegram — se
telegram_bot_tokenetelegram_chat_idconfigurados - Discord — se
discord_webhookconfigurado - Structured Log — sempre ativo (audit trail em JSONL)
Setup Rapido
Via comando (recomendado)
runner notify setup --channel telegramO setup interativo:
- Pede o token do bot (do @BotFather)
- Valida via API do Telegram (
getMe) - Pede para enviar mensagem ao bot (DM, grupo ou canal)
- Auto-detecta
chat_id— se encontrar multiplos chats, mostra lista - Envia mensagem de teste
- Salva no
config.yml
Setup completo
# Telegram
runner notify setup --channel telegram
# Discord
runner notify setup --channel discord
# Ambos
runner notify setup --channel both
# Verificar status
runner notify status
# Testar envio
runner notify testConfiguracao no config.yml
# /opt/runner/config.yml
notify:
channel: telegram # telegram | discord | both
telegram_bot_token: "123456789:ABCdefGHI..."
telegram_chat_id: "-1001234567890"
discord_webhook: "https://discord.com/api/webhooks/..."Telegram
Criar Bot
- Abra o Telegram e busque
@BotFather - Envie
/newbot - Siga as instrucoes para criar o bot
- Copie o token (formato:
123456789:ABCdefGHIjklMNOpqrsTUVwxyz)
Enviar para DM (mensagem privada)
runner notify setup --channel telegram- Cole o token do bot
- Envie qualquer mensagem direto pro bot no Telegram
- Aperte Enter — o setup detecta o chat automaticamente
Enviar para Grupo
- No BotFather:
/mybots> seu bot > Bot Settings > Group Privacy > Turn off - Adicione o bot ao grupo
- Envie uma mensagem no grupo
- Execute
runner notify setup --channel telegram - Cole o token e aperte Enter
- Escolha o grupo na lista de chats detectados
Enviar para Canal
Canais exigem setup manual porque o bot nao recebe getUpdates de canais.
Adicione o bot como administrador do canal (permissao "Post Messages")
Descubra o
chat_id:Canal publico (
@meucanal):curl -s "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=@meucanal&text=teste"Na resposta, pegue
chat.id(negativo, tipo-1001234567890).Canal privado: encaminhe uma mensagem do canal pro
@userinfobot— ele responde com o ID.Edite o
config.yml:notify: channel: telegram telegram_bot_token: "SEU_TOKEN" telegram_chat_id: "-100XXXXXXXXXX"Teste:
runner notify test
Exemplo de Mensagem
Deploy Iniciado
Projeto: meu-app
Instancia: production
Versao: v1.2.0Deploy Concluido
Projeto: meu-app
Instancia: production
Versao: v1.2.0Discord
Criar Webhook
- Abra as configuracoes do canal Discord
- Va em Integracoes > Webhooks
- Clique em "Criar Webhook"
- Copie a URL do webhook
Configurar
runner notify setup --channel discordCole a URL do webhook quando solicitado. O setup envia um embed de teste e salva no config.yml.
Manual
notify:
channel: discord
discord_webhook: "https://discord.com/api/webhooks/123456/abcdef..."Telegram vs Discord
| Feature | Telegram | Discord |
|---|---|---|
| Formato | Markdown texto | Embeds coloridos |
| Setup | Bot + Chat ID | Webhook URL |
| Rate limit | 30 msg/s | 5 msg/s |
| Tamanho msg | 4096 chars | 6000 chars |
| Grupo/Canal | Suportado | Via webhook por canal |
Eventos Notificados
| Evento | Tipo | Quando |
|---|---|---|
| Deploy Iniciado | DeployStarted |
Pipeline comeca |
| Deploy Concluido | DeploySuccess |
Deploy finalizado com sucesso |
| Deploy Falhou | DeployFailure |
Erro no pipeline |
| Rollback | RollbackSuccess |
Rollback automatico executado |
Formato das Notificacoes (v2.0.7)
Todas as notificacoes incluem um deploy_id (8 caracteres) para correlacao entre mensagens.
Deploy com Sucesso
✅ Deploy Concluído
📦 Projeto: meu-app
🌐 Instance: production
🏷️ Versão: v1.2.0
🆔 a3f7c2d1Deploy com Falha — Mensagem 1 (resumo)
Quando o deploy falha, a primeira notificacao mostra o erro extraido (ate 800 chars) e qual versao ficou ativa:
❌ Deploy Falhou
📦 Projeto: meu-app
🌐 Instance: production
🏷️ Versão: abc1234
🆔 a3f7c2d1
🔄 Rollback: v1.0.0 (versão anterior mantida)
⚠️ Erro:
docker build failed: npm ERR! missing: reactO Runner detecta automaticamente a linha de erro relevante em outputs verbosos do Docker BuildKit, npm, compiladores Rust, Python, etc.
Deploy com Falha — Mensagem 2 (verbose)
Se o erro for maior que 800 caracteres, o runner envia automaticamente uma segunda mensagem com o log completo (ate 3800 chars), vinculada pelo mesmo deploy_id:
📋 Log de Erro Completo
🆔 a3f7c2d1
📦 meu-app/production
docker build failed: #8 [build 3/5] RUN npm install
#8 2.341 npm ERR! code E404
#8 2.342 npm ERR! 404 Not Found - GET https://registry...
#8 2.343 npm ERR! 404 'react-missing@latest' is not in
#8 2.344 npm ERR! the npm registry.
...
(log completo do build)Configuravel no config.yml:
notify:
verbose_errors: true # default: true (envia segunda mensagem)Para desabilitar: verbose_errors: false.
Deploy Bloqueado (retry exaurido)
Quando o mesmo commit falha max_deploy_retries vezes (padrao: 3), o deploy automatico para de tentar. Nenhuma notificacao adicional e enviada — apenas o log do fetch --deploy registra:
⊘ meu-app/front — deploy bloqueado (mesmo commit falhou 3x)O deploy e desbloqueado automaticamente ao receber um novo push (commit diferente).
Structured Logging (Audit Trail)
Alem das notificacoes por canal, o pipeline grava todos os eventos em deploy-events.jsonl no diretorio de logs (/opt/runner/logs/).
Cada linha e um JSON:
{"timestamp":"2026-03-12T17:45:00Z","event_type":"DeployStarted","project":"meu-app","instance":"production","version":"v1.2.0"}
{"timestamp":"2026-03-12T17:46:30Z","event_type":"DeploySuccess","project":"meu-app","instance":"production","version":"v1.2.0"}O structured log e sempre ativo, independente dos canais configurados.
Comandos
| Comando | Descricao |
|---|---|
runner notify setup |
Setup interativo |
runner notify setup --channel telegram |
Setup Telegram |
runner notify setup --channel discord |
Setup Discord |
runner notify setup --channel both |
Setup ambos |
runner notify test |
Envia notificacao de teste |
runner notify status |
Mostra status dos canais |
Desabilitar Notificacoes
Nao configure nenhum canal no config.yml — ou remova a secao notify:.
Troubleshooting
Telegram nao envia
- Verifique o token:
runner notify status - Verifique se o
chat_idesta correto (negativo para grupos/canais) - Para grupos: verifique se o bot foi adicionado e o Group Privacy esta desligado
- Para canais: verifique se o bot e admin com permissao "Post Messages"
- Teste manualmente:
curl -s "https://api.telegram.org/bot<TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=teste"
Discord nao envia
- Verifique a URL do webhook:
runner notify status - Verifique se o webhook nao foi deletado no Discord
- Teste manualmente:
curl -X POST "<WEBHOOK_URL>" -H "Content-Type: application/json" -d '{"content":"teste"}'
Setup nao detecta chat_id
- Certifique-se de enviar a mensagem depois do bot ser validado
- Envie a mensagem e espere 2-3 segundos antes de apertar Enter
- Se nao detectar, o setup pede o chat_id manualmente
Logs estruturados nao escrevem
- Verifique permissoes do diretorio
/opt/runner/logs/ - O diretorio e criado automaticamente se nao existir