jenkins jenkins-plugins slack-api

Integración de Jenkins Slack



jenkins-plugins slack-api (7)

Quiero usar el complemento Slack en Jenkins para enviar notificaciones a un canal Slack.

Jenkins dice éxito cuando pruebo la conexión, pero no recibo ninguna notificación en mi canal Slack.

¿Hay algún problema conocido?

¿Cómo puedo hacer que Jenkins envíe notificaciones a Slack?


Creo que deberías agregar la acción posterior a la compilación "Slack Notification" en tu Jenkins. Por favor vea la imagen de abajo.


Hay dos pasos para configurar un trabajo de Jenkins para publicar en un canal flojo.

  1. Vaya a las configuraciones de trabajo de jenkins y agregue una acción posterior a la compilación en cada trabajo al que desee hacer ping en el canal flojo.

  1. A continuación, nuevamente bajo las configuraciones de trabajo, debe configurar en cada trabajo en qué casos desea enviar notificaciones flojas: (verdadero - falso) fe

En el caso de que tenga que configurar un gran número de trabajos de Jenkins, podría configurar solo uno de ellos manualmente y verificar que esté funcionando bien. Luego revise el archivo config.xml de este trabajo de Jenkins para encontrar los elementos xml generados automáticamente para las preferencias del complemento de holgura y aplique esas configuraciones en todos los trabajos de Jenkins usando regex o xslt. En este caso, tendrá que volver a cargar las configuraciones de Jenkins para que se apliquen las actualizaciones de las configuraciones de trabajo. ("Manage Jenkins" / "Reload Configuration from Disk")

Requisitos previos:

  • Instalar el plugin de holgura en Jenkins.
  • Obtenga un token de integración de Jenkins CI en su dominio de holgura.
  • Ir en Jenkins "Gestionar Jenkins" / "Configurar sistema". Allí tiene que configurar la "Configuración del notificador de holgura global".

No utilicé la notificación de Slack porque quiero personalizar el estilo / estado / mensaje, etc. Así que escribí un job llamado send_slack_notification . Cada vez que quiero notificar a la API de slack, llamo a este trabajo después de la compilación.

Aquí está el código en "Ejecutar Shell", usé curl , sed y jsawk para hacer el trabajo:

# 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


Pensé en agregarlo aquí para el mayor bien de la comunidad. Así es como se obtiene el token de integración.

Instrucciones de 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


Tuve problemas similares.

Funcionó para mí cuando desactivé "¿Es el usuario de Bot?"

Sin embargo, al iniciar a Jenkins en la consola con ''jenkins'' no con brew demonio.

Tal vez eso ayude :) Saludos ^ __ ^


Y está seguro de que tiene una configuración correcta. En configuración de compilación (No olvide # carácter)

En configuración general


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>

No pude obtener nada más que ''falla'' de la prueba de conexión floja en la configuración. Puedo usar python desde el mismo cuadro, así que no sé cuál es el problema, así que solo puedo usar este simple script.