Зачем 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 видит только шифротекст.