Интеграция Jenkins Slack

Я хочу использовать плагин Slack в Jenkins для отправки уведомлений на канал Slack.

Дженкинс говорит об успехе, когда я проверяю соединение, но я не получаю никаких уведомлений в своем канале Slack.

Есть ли известные проблемы?

Как я могу заставить Дженкинса отправлять уведомления в Slack?


person Felix    schedule 16.05.2015    source источник
comment
Настроили ли вы канал для (каждого) задания сборки в действии после сборки?   -  person xeraa    schedule 16.05.2015
comment
Вы также можете попробовать средство уведомления о сборке, например CatLight. Он создает меньше шума, чем уведомления в чате, и всегда показывает текущее состояние задания в трее.   -  person alex    schedule 24.03.2017


Ответы (8)


А вы уверены, что у вас правильная конфигурация. В конфигурации сборки (не забудьте символ #) введите здесь описание изображения

В общей конфигурации введите здесь описание изображения

person Nguyen Sy Thanh Son    schedule 09.06.2015
comment
Интеграционный токен в том, что тот, что для канала, есть выше? для команды или что-то в этом роде? - person Felix; 09.06.2015
comment
это работало для меня, а потом в один прекрасный день это прекратилось. вероятно срок действия токена истек. кто-нибудь знает, где я могу получить токен интеграции? - person Ohad Perry; 29.02.2016
comment
Кто-нибудь знает, что означает токен Slack Integration? - person VirtualProdigy; 18.01.2017
comment
@VirtualProdigy Я считаю, что токен интеграции — это токен, сгенерированный, когда вы включаете расширение в конфигурации Slack вашей команды. - person andrewdcato; 17.03.2017
comment
@andrewdcato Я попробую. Спасибо - person VirtualProdigy; 17.03.2017
comment
мой сервер jenkins находится на порту 443. я продолжаю получать 504. имеет ли значение, что он включен ssl? - person Prachi; 20.06.2017

Я думаю, что вы должны добавить действие после сборки «Slack Notification» в свой Jenkins. Пожалуйста, посмотрите на изображение ниже

введите здесь описание изображения

person Nguyen Sy Thanh Son    schedule 09.06.2015
comment
У меня была аналогичная проблема от одного из моих пользователей. Я не догадался проверить, было ли это сделано. Спасибо, что указали на это. - person Brian S. Wilson; 02.02.2016
comment
Довольно сбивает с толку наличие параметров конфигурации, которые на самом деле не будут применяться, пока вы не добавите их в качестве шага сборки. Параметры должны быть изначально скрыты, а затем отображаться на панели шагов сборки. - person Peter Clotworthy; 13.03.2016
comment
Есть ли способ изменить сообщение бота, чтобы включить @channel или @here для срочного уведомления команды? - person dialex; 27.07.2016

Есть два шага, чтобы настроить задание Jenkins для публикации в слабом канале.

  1. Перейдите к настройкам заданий jenkins и добавьте действие после сборки для каждого задания, которое вы хотите пропинговать в слабом канале.

введите здесь описание изображения

  1. Затем, снова в настройках задания, вы должны настроить для каждого задания, в каких случаях вы хотите отправлять уведомления о неактивности: (true - false) f.e.

введите здесь описание изображения

В случае, если вам нужно настроить большое количество заданий Jenkins, вы можете вручную настроить только одно из них и убедиться, что оно работает нормально. Затем проверьте config.xml этого задания Jenkins, чтобы найти автоматически сгенерированные элементы xml для настроек плагина slack, и примените эти конфигурации ко всем заданиям Jenkins с помощью регулярного выражения или xslt. В этом случае вам придется перезагрузить конфигурации Jenkins, чтобы применить обновления конфигураций заданий. ("Управление Jenkins" / "Перезагрузить конфигурацию с диска").

Предпосылки:

  • Установите слабый плагин в Jenkins.
  • Получите токен интеграции Jenkins CI в своем домене slack.
  • Перейдите в Jenkins «Управление Jenkins» / «Настройка системы». Там вы должны настроить «Глобальные настройки уведомлений Slack».
person Dorina Dede    schedule 12.02.2016

Я не использовал Slack Notification, потому что хочу настроить стиль/состояние/сообщение и т. д. Поэтому вместо этого я написал job под названием send_slack_notification. Каждый раз, когда я хочу уведомить слабый API, я просто вызываю это задание после сборки.

Вот код в «Execute Shell», я использовал curl, sed и jsawk для выполнения задания:

# 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
person Tom    schedule 22.07.2016
comment
Мне интересно, как определить URL-адрес для публикации. Я вижу, что в конфигурации slack-плагина он предоставляет BASE_URL и INTEGRATION_TOKEN. Можно ли их использовать для определения замены https://hooks.slack.com/services/BLABLABLA/BLABLABLA/BLABLABLABLABLABLA? - person pbatey; 23.08.2017
comment
nm - разобрался, они конкатенированы. curl -v -X POST -H 'Content-type: application/json' --data '{ "text": "test msg" }' $BASE_URL/$INTEGRATION_TOKEN - person pbatey; 23.08.2017

Я решил добавить его сюда для большего блага сообщества. Вот как вы получаете токен интеграции

Инструкции Дженкинса

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

person vishal    schedule 21.10.2016

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>

Я не мог получить ничего, кроме «сбоя» в тесте слабого соединения в конфигурации. Я могу использовать python из той же коробки, поэтому я не знаю, в чем проблема, поэтому я могу просто использовать этот простой скрипт.

person ddtraveller    schedule 18.10.2016

Если вы хотите получать уведомления с помощью декларативных конвейеров Jenkins, вы можете установить плагин Slack, а затем использовать его в конвейере следующим образом:

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

Результат: введите здесь описание изображения

Конечно, вы можете настроить свое сообщение. Полный пример по адресу:

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

person SegFault    schedule 05.05.2020

У меня были похожие проблемы.

У меня это сработало, когда я снял флажок «Пользователь бота?»

Однако запуск Дженкинса в консоли с помощью «дженкинса», а не с варева демона.

Может быть, это поможет :) Приветствую ^__^

person Stefanie Habersatter    schedule 26.07.2017
comment
Ну, есть 2 разных способа запустить Дженкинса. только с пивом и командой «дженкинс». (кстати, я использую MAC), а в конфигурации Slack внутри CI Server Jenkins была опция callend 'is Bot USer? Когда я снял флажок, это сработало для меня. Вероятно, из-за того, что я не начал Дженкинса с варева Извините лучше XD? - person Stefanie Habersatter; 02.08.2017