Jenkins-уведомления

Уведомления из Jenkins на телефон.

Build упал, deploy сломался, nightly job красный — зашифрованный push на телефон. Без отдельного Jenkins-плагина.

Зачем 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.