web-dev-qa-db-fra.com

Intégration de Jenkins Slack

Je veux utiliser le plugin Slack dans Jenkins pour envoyer des notifications ping à un canal Slack.

Jenkins dit que je réussis lorsque je teste la connexion, mais je ne reçois aucune notification sur ma chaîne Slack.

Y a-t-il des problèmes connus?

Comment puis-je demander à Jenkins d'envoyer des notifications à Slack?

21
Felix

Et êtes-vous sûr d'avoir une configuration correcte. Dans la configuration de construction (n'oubliez pas le caractère #) enter image description here

En configuration générale enter image description here

12

Je pense que vous devriez ajouter une action post-build "Slack Notification" dans votre Jenkins. Veuillez voir l'image ci-dessous

enter image description here

17

Il y a deux étapes pour configurer un travail Jenkins à publier sur un canal mou.

  1. Accédez aux configurations de travail jenkins et ajoutez une action de post-génération sur chaque travail sur lequel vous souhaitez envoyer une requête ping au canal mou.

enter image description here

  1. Ensuite, toujours sous les configurations de travail, vous devez configurer sur chaque travail sur quels cas vous souhaitez envoyer des notifications lâches: (vrai - faux) f.e.

enter image description here

Dans le cas où vous devez configurer un grand nombre de travaux Jenkins, vous ne pouvez configurer qu'un seul d'entre eux manuellement et vérifier qu'il fonctionne correctement. Ensuite, vérifiez le config.xml de ce travail Jenkins pour trouver les éléments xml générés automatiquement pour les préférences du plug-in mou et appliquez ces configurations sur tous les travaux Jenkins en utilisant regex ou xslt. Dans ce cas, vous devrez recharger les configurations Jenkins pour que les mises à jour des configurations de travail soient appliquées. ("Gérer Jenkins"/"Recharger la configuration à partir du disque" ")

Conditions préalables:

  • Installez le plugin slack dans Jenkins.
  • Obtenez un jeton d'intégration Jenkins CI dans votre domaine mou.
  • Allez dans Jenkins "Gérer Jenkins"/"Configurer le système". Là, vous devez configurer le "Global Slack Notifier Setting".
7
ignis

Je n'ai pas utilisé la notification Slack parce que je veux personnaliser le style/état/message, etc. J'ai donc écrit un job appelé send_slack_notification au lieu. Chaque fois que je veux notifier une API lâche, j'appelle simplement ce travail après la construction.

Voici le code dans "Execute Shell", j'ai utilisé curl, sed et jsawk pour faire le travail:

# 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
4
Tom

J'ai pensé l'ajouter ici pour le plus grand bien de la communauté. Voici comment vous obtenez le jeton d'intégration

Instructions Jenkins

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

4
vishal
import os
import sys
from slacker import Slacker
import base64

def main():
    myPass=sys.argv[1]
    msgStr= sys.argv[2]
    channel = sys.argv[3]

    slack = Slacker(myPass)
    slack.chat.post_message(channel, msgStr)
    print msgStr

if __name__ == '__main__':
    main()    

python slack.py <token> < message str > <#channel>

Je n'ai rien pu obtenir d'autre que "l'échec" du test de connexion lâche dans la configuration. Je peux utiliser python dans la même boîte, donc je ne sais pas quel est le problème, donc je peux simplement utiliser ce script simple.

1
ddtraveller

J'ai eu des problèmes similaires.

Cela a fonctionné pour moi quand j'ai décoché "est l'utilisateur Bot?"

démarrer Jenkins dans la console avec 'jenkins' pas avec brew demon, cependant.

Peut-être que cela aide :) Salutations ^ __ ^

0