GitLab CI/CD-алерты

Уведомления из GitLab CI/CD на телефон.

Пайплайн упал, деплой сломался, MR-билд красный — зашифрованный push на телефон. Одна строка в .gitlab-ci.yml.

Зачем Nerve для GitLab CI

GitLab шлёт email-уведомления, но email — это шумно и незашифровано. Nerve даёт real-time зашифрованный push на телефон из одного шага в пайплайне. DSN в CI/CD-переменных умеет только отправлять — не читать историю и не выполнять команды.

Базовый .gitlab-ci.yml

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 "Pipeline failed: $CI_PROJECT_NAME ($CI_COMMIT_REF_NAME)" | nerve send --severity critical
  variables:
    NERVE_DSN: $NERVE_DSN

Уведомление о каждом результате

notify:
  stage: notify
  when: always
  script:
    - go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
    - echo "$CI_PROJECT_NAME $CI_PIPELINE_STATUS ($CI_COMMIT_REF_NAME)" | nerve send
  variables:
    NERVE_DSN: $NERVE_DSN

Уведомление при деплое

deploy-production:
  stage: deploy
  script:
    - ./deploy.sh production
  after_script:
    - |
      if [ "$CI_JOB_STATUS" = "failed" ]; then
        echo "DEPLOY FAILED: $CI_PROJECT_NAME → production" | nerve send --severity critical
      else
        echo "Deployed $CI_PROJECT_NAME → production ($CI_COMMIT_SHORT_SHA)" | nerve send
      fi
  variables:
    NERVE_DSN: $NERVE_DSN

DSN как CI/CD-переменная

Перейдите в Settings → CI/CD → Variables и добавьте NERVE_DSN как masked protected variable.

NERVE_DSN=nerve://TOKEN:[email protected]

FAQ

Protected variables

Для production DSN используйте protected и masked variable. Тогда секрет не попадет в pipeline из непроверенной ветки или merge request, где его может прочитать чужой код.

Что отправлять

Минимальный полезный payload: $CI_PROJECT_PATH, $CI_COMMIT_REF_NAME, $CI_JOB_STATUS, $CI_PIPELINE_URL. Полный job log лучше оставить в GitLab.

echo "GitLab failed: $CI_PROJECT_PATH / $CI_COMMIT_REF_NAME
pipeline=$CI_PIPELINE_URL" | nerve send --severity critical
Как отправить алерт из GitLab CI на телефон?

Добавьте шаг nerve send в .gitlab-ci.yml. Используйте when: on_failure для алертов только при падении, или when: always для каждого результата.

Работает с self-hosted GitLab?

Да. Nerve CLI отправляет сигналы по HTTPS. Работает с любого runner'а.

Данные зашифрованы?

Да. Payload шифруется на runner'е. Relay видит только шифротекст.