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.
- 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.
- 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.
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.