2016-08-25 43 views
18

Mam skrypt groovy rurociągu w Jenkins v2.19. Mam również
"Powiadomienie o zalewaniu" v2.0.1 i "Groovy Postbuild Plugin".Jak wysłać powiadomienie o zwarciu po kompilacji potoku Jenkins?

Udało mi się wysłać wiadomość "build started" i "build finished" (jeśli miał).

Kiedy nie udało się wykonać jakiegoś kroku kompilacji - w jaki sposób mogę wysłać komunikat "Kompilacja nie powiodła się" do kanału Slack?

+0

Wydaje mi się, że wtyczka Slack ma już pole wyboru "powiadomienie o niepowodzeniu". Czy korzystasz z najnowszej wersji wtyczki Slack? – Riduidel

+0

@Riduidel, gdzie możesz zobaczyć to pole wyboru? – kivagant

+0

Mam wersję 2.0.1 Plugin Powiadomienia o zalobieniu – kivagant

Odpowiedz

21

Możesz zrobić coś takiego i użyć bloku catch próby.

Oto przykład kodu:

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) 
} 

Kompletna fragment można znaleźć tutaj Jenkinsfile Template

+0

Dziękuję, @ ​​Fahl-Design, spróbuję tego nieco później i napiszę wam wyniki. – kivagant

+1

To działa!^_^ – kivagant

+0

Świetnie! ciesz się;) Jak widzisz w tym fragmencie możesz dodać dowolną inną usługę powiadamiania po slackSend –

14

podstawie Liam Newman's blog post, spojrzeć na tym fragmencie czyszczone tylko za Slack. Wykorzystuje oryginalne Jenkins results formatowanie wiadomość, lepsze kolory (na podstawie EclEmma), a niektóre Groovy funkcje, takie jak default arguments:

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) 
    } 
} 

Wyjście będzie coś takiego (poeksperymentować z różnymi stylami formatowania here):

może env.JOB_NAME zawiera zakodowane ukośnik (%2F), które mogą być ustalone z replaceAll("%2F", "/").

Sprawdź, jak powiadomić HipChat, jak również this Gist.

+0

Artykuł Liama ​​wydaje się już nie być dostępny. – Amida

+1

@Amida dzięki za podpowiedź, naprawiłem to. – beatngu13