Jenkins Slack integration

后端 未结 8 788
一整个雨季
一整个雨季 2021-02-07 01:30

I want to use the Slack plugin in Jenkins to ping notifications to a Slack channel.

Jenkins says success when I test the connection, but I don\'t receive any notificatio

相关标签:
8条回答
  • 2021-02-07 01:57

    I think that you should add post-build action "Slack Notification" in your Jenkins. Please see the image below

    enter image description here

    0 讨论(0)
  • 2021-02-07 02:02

    If you want to receive notifications using Jenkins declarative pipelines, you can install the Slack plugin, and then use it in the pipeline in this way:

        stage('Clone sources') {
            steps {
                slackSend (channel: "#mychannel", color: '#FFFF00', message: "STARTED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]' (${env.BUILD_URL})")
                git credentialsId: 'git_credentials', poll: false, branch: 'develop', url: 'https://mysource.com/mysimplenodejsexample.git'
            }        
        }
    

    Result:

    You can customize your message of course. Full example at:

    https://pillsfromtheweb.blogspot.com/2020/05/send-notifications-to-slack-from.html

    0 讨论(0)
  • 2021-02-07 02:04

    I though of adding it here for the greater good of the community. This is how you get the integration token

    Jenkins Instructions

    Get a Slack account: https://slack.com/
    Configure the Jenkins integration: https://my.slack.com/services/new/jenkins-ci
    Install this plugin on your Jenkins server
    Configure it in your Jenkins job and add it as a Post-build action.
    

    https://github.com/jenkinsci/slack-plugin

    0 讨论(0)
  • 2021-02-07 02:14

    And are you sure that you have a correct configuration. In Build Configuration (Do not forget # character) enter image description here

    In General Configuration enter image description here

    0 讨论(0)
  • 2021-02-07 02:18

    There are two steps to configure a Jenkins job to be posting on a slack channel.

    1. Go to jenkins job configurations and add a post-build action on each job that you wish to ping the slack channel.

    1. Next, again under the job configurations, you have to configure on each job on which cases you wish to send slack notifications: (true - false) f.e.

    In the case that you have to configure a great number of Jenkins jobs, you could configure only one of them manually and verify it is working fine. Then check the config.xml of this Jenkins job to find the auto-generated xml elements for the slack plugin preferences and apply those configs on all Jenkins jobs by using regex or xslt. In this case, you will have to reload the Jenkins configs for the job configurations updates to be applied. ("Manage Jenkins" / "Reload Configuration from Disk")

    Prerequisites:

    • Install slack plugin in Jenkins.
    • Obtain a Jenkins CI integration token in your slack domain.
    • Go in Jenkins "Manage Jenkins" / "Configure System". There you have to configure the "Global Slack Notifier Setting".
    0 讨论(0)
  • 2021-02-07 02:21

    I didn't use the Slack Notification because I wanna customize style/state/message, etc. So I wrote a job called send_slack_notification instead. Every time I want to notify slack API I just call this job after build.

    Here's the code in "Execute Shell", I used curl, sed and jsawk to do the job:

    # URL to get the built info json
    # will get "http://JENKINS_PATH/job/JOB_NAME/97/api/json"
    NEW_URL="http://jks_username:jks_password@"$(echo ${BUILD_URL} | sed -r 's/http:\/\///g')"/api/json"
    
    # Cut the JOB_NAME part from BUILD_URL
    JOB_NAME=$(echo ${BUILD_URL} | sed -n 's/.*\/job\/\(.*\)\/[0-9].*/\1/p' | sed "s@+@ @g;s@%@\\\\x@g" | xargs -0 printf "%b")
    
    # Get the built info json
    JSON=$(curl $NEW_URL)
    
    STATUS=$(echo $JSON | /usr/local/bin/jsawk "return this.result")
    BUILD_INFO=$(echo $JSON | /usr/local/bin/jsawk "return this.displayName")
    TIME=$(echo $JSON | /usr/local/bin/jsawk "return this.duration")
    TIME=$(echo "scale=4; $TIME/1000" | bc -l)
    
    # Cut the username
    USER=$(echo $JSON | /usr/local/bin/jsawk "return this" | sed -n "s/.*Started\ by\ \([^\"]*\).*/\1/p")
    
    # Customize the message sending to slack
    TEXT=$JOB_NAME" Built by "$USER", it took "$TIME" seconds."
    
    # Send notification using Slack API
    # will send to https://hooks.slack.com/services/BLABLABLA/BLABLABLA
    curl -X POST -H 'Content-type: application/json' --data '{"channel": "#production_info","username": "jenkins-bot","icon_emoji": ":lol:","text": "'"$TEXT"' (<'"$BUILD_URL"'|Open>)", "attachments": [{"color": "#36a64f", "fields": [{"title":"UPDATE INFO","value":"'"$BUILD_INFO"'","short":true},{"title":"RESULT","value":"'"$STATUS"'","short":true}]}]}' https://hooks.slack.com/services/BLABLABLA/BLABLABLA/BLABLABLABLABLABLA
    
    0 讨论(0)
提交回复
热议问题