Зачем Nerve для Jenkins
Email из Jenkins легко пропустить. Nerve отправляет короткий зашифрованный сигнал прямо из pipeline. Sender DSN умеет только отправлять в один pipe — не читать историю и не выполнять команды.
Jenkinsfile: уведомление при ошибке
pipeline {
agent any
environment {
NERVE_DSN = credentials('nerve-dsn')
}
stages {
stage('Build') {
steps { sh 'make build' }
}
stage('Test') {
steps { sh 'make test' }
}
}
post {
failure {
sh '''
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
echo "Jenkins failed: ${JOB_NAME} #${BUILD_NUMBER}" | nerve send --severity critical
'''
}
}
}
Уведомление о каждом результате
post {
always {
sh '''
go install github.com/nerve-ink/nerve-cli/cmd/nerve@latest
echo "Jenkins ${currentBuild.currentResult}: ${JOB_NAME} #${BUILD_NUMBER}" | nerve send
'''
}
}
Алерт при production deploy
stage('Deploy production') {
steps {
sh './deploy.sh production'
}
post {
success {
sh 'echo "Production deploy OK: ${GIT_COMMIT}" | nerve send'
}
failure {
sh 'echo "Production deploy FAILED: ${JOB_NAME}" | nerve send --severity critical'
}
}
}
DSN как Jenkins credential
Создайте secret text credential с именем nerve-dsn. Не храните DSN прямо в Jenkinsfile и не печатайте его в logs.
NERVE_DSN=nerve://TOKEN:[email protected]
Что отправлять из Jenkins
У Jenkins часто очень длинные логи. В push лучше отправлять только короткий summary и ссылку на build page.
echo "Jenkins FAILED: ${JOB_NAME} #${BUILD_NUMBER}
url=${BUILD_URL}
branch=${BRANCH_NAME}
commit=${GIT_COMMIT}" | nerve send --severity critical
Freestyle job
Если job не Pipeline, добавьте shell step после build-команды и проверяйте exit code вручную.
./build.sh
STATUS=$?
if [ "$STATUS" -ne 0 ]; then
echo "Jenkins failed: $JOB_NAME #$BUILD_NUMBER status=$STATUS" \
| nerve send --severity critical
fi
exit "$STATUS"
Когда не слать success
Если nightly job запускается часто, success-сообщения быстро станут шумом. Оставьте success только для production deploy или release job, где человек ждет подтверждения.
FAQ
Как отправить уведомление из Jenkins на телефон?
Добавьте nerve send в post block вашего Jenkinsfile. DSN храните как Jenkins credential.
Можно уведомлять только об ошибках?
Да. Используйте failure block в секции post.
Данные Jenkins зашифрованы?
Да. Текст, который передаётся в nerve send, шифруется до отправки на relay.