web-dev-qa-db-ja.com

Jenkins Slackの統合

JenkinsのSlackプラグインを使用して、Slackチャンネルへの通知をpingしたいです。

Jenkinsは接続をテストすると成功したと言いますが、Slackチャンネルで通知を受け取りません。

既知の問題はありますか?

JenkinsにSlackに通知を送信するにはどうすればよいですか?

21
Felix

そして、あなたは正しい構成を持っていると確信しています。ビルド構成で(#文字を忘れないでください) enter image description here

一般的な構成で enter image description here

12

Jenkinsにビルド後のアクション「Slack Notification」を追加する必要があると思います。下の画像をご覧ください

enter image description here

17

Jenkinsジョブをスラックチャネルに投稿するように構成するには、2つの手順があります。

  1. Jenkinsのジョブ構成に移動し、スラックチャネルをpingする各ジョブにビルド後のアクションを追加します。

enter image description here

  1. 次に、ジョブ設定の下で、スラック通知を送信するケースの各ジョブで設定する必要があります:(true-false)f.e.

enter image description here

多数のJenkinsジョブを構成する必要がある場合、そのうちの1つだけを手動で構成し、正常に動作することを確認できます。次に、このJenkinsジョブのconfig.xmlを確認して、slackプラグイン設定の自動生成されたxml要素を見つけ、regexまたはxsltを使用して、それらの構成をすべてのJenkinsジョブに適用します。 この場合、適用されるジョブ構成の更新のためにJenkins構成を再ロードする必要があります。( "Jenkinsの管理"/"ディスクからの構成の再ロード")

前提条件:

  • Jenkinsにslackプラグインをインストールします。
  • スラックドメインでJenkins CI統合トークンを取得します。
  • Jenkinsの「Manage Jenkins」/「Configure System」に移動します。そこで、「Global Slack Notifier Setting」を設定する必要があります。
7
ignis

スタイル/状態/メッセージなどをカスタマイズするためにSlack Notificationを使用しませんでした。そのため、代わりにsend_slack_notificationというjobを作成しました。 Slack APIに通知するたびに、ビルド後にこのジョブを呼び出します。

「実行シェル」のコードは次のとおりです。私はcurlsedおよび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
4
Tom

コミュニティの利益のためにここに追加しました。これが統合トークンの取得方法です

ジェンキンスの指示

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>

設定のスラック接続テストから「失敗」以外は何も取得できませんでした。同じボックスからpythonを使用できるので、問題が何なのかわからないので、この単純なスクリプトを使用できます。

1
ddtraveller

同様の問題がありました。

「ボットユーザーですか?」のチェックを外すとうまくいきました。

ただし、醸造悪魔ではなく「ジェンキンス」でコンソールでジェンキンスを起動します。

多分それは役立ちます:)ご挨拶^ __ ^