Подтвердить что ты не робот

Как отправить уведомление Slack после сборки трубопровода Jenkins?

У меня есть конвейер groovy script в Jenkins v2.19. Также у меня есть "Slack Notification Plugin" v2.0.1 и "Groovy Postbuild Plugin".

Я успешно отправил сообщение "build started" и "build finished" (если он был).

Когда произошел какой-то шаг сборки - как я могу отправить сообщение "Сбой сборки" на канал Slack?

4b9b3361

Ответ 1

Вы можете сделать что-то подобное и использовать блок catch try.

Вот пример кода:

node {
    try {
        notifyBuild('STARTED')

        stage('Prepare code') {
            echo 'do checkout stuff'
        }

        stage('Testing') {
            echo 'Testing'
            echo 'Testing - publish coverage results'
        }

        stage('Staging') {
            echo 'Deploy Stage'
        }

        stage('Deploy') {
            echo 'Deploy - Backend'
            echo 'Deploy - Frontend'
        }

  } catch (e) {
    // If there was an exception thrown, the build failed
    currentBuild.result = "FAILED"
    throw e
  } finally {
    // Success or failure, always send notifications
    notifyBuild(currentBuild.result)
  }
}

def notifyBuild(String buildStatus = 'STARTED') {
  // build status of null means successful
  buildStatus =  buildStatus ?: 'SUCCESSFUL'

  // Default values
  def colorName = 'RED'
  def colorCode = '#FF0000'
  def subject = "${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
  def summary = "${subject} (${env.BUILD_URL})"

  // Override default values based on build status
  if (buildStatus == 'STARTED') {
    color = 'YELLOW'
    colorCode = '#FFFF00'
  } else if (buildStatus == 'SUCCESSFUL') {
    color = 'GREEN'
    colorCode = '#00FF00'
  } else {
    color = 'RED'
    colorCode = '#FF0000'
  }

  // Send notifications
  slackSend (color: colorCode, message: summary)
}

Полный фрагмент можно найти здесь Шаблон Jenkinsfile

Ответ 2

На основе сообщение в блоге Лиама Ньюмана, посмотрите на этот очищенный сниппет только для Slack. Он использует оригинальные результаты Jenkins, форматирование сообщений, лучшие цвета (на основе EclEmma) и некоторые Groovy функции, такие как аргументы по умолчанию:

def notifySlack(String buildStatus = 'STARTED') {
    // Build status of null means success.
    buildStatus = buildStatus ?: 'SUCCESS'

    def color

    if (buildStatus == 'STARTED') {
        color = '#D4DADF'
    } else if (buildStatus == 'SUCCESS') {
        color = '#BDFFC3'
    } else if (buildStatus == 'UNSTABLE') {
        color = '#FFFE89'
    } else {
        color = '#FF9FA1'
    }

    def msg = "${buildStatus}: `${env.JOB_NAME}` #${env.BUILD_NUMBER}:\n${env.BUILD_URL}"

    slackSend(color: color, message: msg)
}

node {
    try {
        notifySlack()

        // Existing build steps.
    } catch (e) {
        currentBuild.result = 'FAILURE'
        throw e
    } finally {
        notifySlack(currentBuild.result)
    }
}

Результат будет примерно таким (играйте с разными стилями форматирования здесь):

введите описание изображения здесь

Может быть, env.JOB_NAME содержит закодированные косые черты (%2F), которые могут быть исправлены с помощью replaceAll("%2F", "/").

Просмотрите этот Gist, чтобы узнать, как уведомить HipChat также.