CI/CD без бота

CI/CD уведомления без Telegram-бота.

В вашей ops-группе 847 непрочитанных. Половина — зелёные галочки. Единственная красная ошибка — погребена. Есть способ лучше.

Проблема с Telegram-ботом для CI

Каждая команда проходит один путь: «Давайте CI-алерты в Telegram!». Через полгода:

Проблема не в 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

ШумTelegram: ✅ success + ❌ failure + 💬 обсуждения в одном потоке. Nerve: только то, что вы настроите (обычно — только ошибки).
ЗаметностьСообщение в замьюченной группе — невидимо. Push на телефон — виден.
Безопасность токенаТокен Telegram-бота: чтение истории, участников, файлов. Nerve DSN: только отправка зашифрованных сигналов в один pipe.
ДанныеTelegram хранит ваш CI-вывод в plaintext. Nerve шифрует до отправки.

Настройка за 2 минуты

  1. GitHub: Settings → Secrets → Actions → добавить NERVE_DSN
  2. GitLab: Settings → CI/CD → Variables → добавить NERVE_DSN (masked, protected)
  3. Добавить шаг nerve send в пайплайн
  4. Сломать тест — телефон должен завибрировать

FAQ

Как получать CI-алерты без Telegram-бота?

Добавьте nerve send в workflow с условием if: failure(). DSN хранится как secret. Push приходит на телефон.

Зачем отказываться от Telegram?

Токен бота = доступ к истории. Группа замусоривается. Ошибки теряются. Nerve — только ошибки, зашифровано, прямо на телефон.

Можно только ошибки?

Да. GitHub: if: failure(). GitLab: when: on_failure.