Проблема с Telegram-ботом для CI
Каждая команда проходит один путь: «Давайте CI-алерты в Telegram!». Через полгода:
- Ops-группа замьючена — слишком шумно
- Ошибки теряются среди ✅-сообщений
- Токен бота лежит в 5 местах и имеет доступ ко всей истории
- CI-вывод (репозитории, ветки, ошибки, серверы) хранится на серверах Telegram в plaintext
Проблема не в Telegram. CI-алерты и командный чат — разные вещи. Одно — сигнал, «что-то сломалось, действуй». Другое — разговор. Смешивание ухудшает оба.
Решение: только ошибки → push на телефон
GitHub Actions
name: Build & Test
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: make build
- name: Test
run: make test
- name: Алерт при ошибке
if: failure()
env:
NERVE_DSN: ${{ secrets.NERVE_DSN }}
run: |
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
echo "УПАЛ: ${{ github.repository }} (${{ github.ref_name }})" \
| nerve send --severity critical
GitLab CI
stages:
- build
- test
- notify
build:
stage: build
script: make build
test:
stage: test
script: make test
notify-failure:
stage: notify
when: on_failure
script:
- go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
- echo "УПАЛ: $CI_PROJECT_NAME ($CI_COMMIT_REF_NAME)" | nerve send --severity critical
variables:
NERVE_DSN: $NERVE_DSN
Уведомление о деплое
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy
id: deploy
run: ./deploy.sh production
continue-on-error: true
- name: Результат деплоя
env:
NERVE_DSN: ${{ secrets.NERVE_DSN }}
run: |
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
if [ "${{ steps.deploy.outcome }}" = "failure" ]; then
echo "ДЕПЛОЙ УПАЛ: ${{ github.repository }} → production" | nerve send --severity critical
else
echo "Задеплоен: ${{ github.repository }} → production" | nerve send
fi
Много репозиториев — один телефон
Один NERVE_DSN на все репозитории. Ошибки из любого репо — push на телефон. Больше не нужно проверять 12 Telegram-групп.
# Organization secret в GitHub:
# Settings → Secrets → Actions → New organization secret
# NERVE_DSN = nerve://TOKEN:[email protected]
Telegram-бот vs Nerve для CI
Настройка за 2 минуты
- GitHub: Settings → Secrets → Actions → добавить
NERVE_DSN - GitLab: Settings → CI/CD → Variables → добавить
NERVE_DSN(masked, protected) - Добавить шаг
nerve sendв пайплайн - Сломать тест — телефон должен завибрировать
FAQ
Как получать CI-алерты без Telegram-бота?
Добавьте nerve send в workflow с условием if: failure(). DSN хранится как secret. Push приходит на телефон.
Зачем отказываться от Telegram?
Токен бота = доступ к истории. Группа замусоривается. Ошибки теряются. Nerve — только ошибки, зашифровано, прямо на телефон.
Можно только ошибки?
Да. GitHub: if: failure(). GitLab: when: on_failure.