Slack — Notify from BASH

Первым делом, если у вас нету webhook'и, ее нужно создать, для этого перейдите по ссылке:

https://YOU_ORGANIZATION_NAME.slack.com/services/new/incoming-webhook

Где "YOU_ORGANIZATION_NAME" имя вашей организации в Slack

Дальше нужно скачать скрипт:

curl -s https://gist.githubusercontent.com/andkirby/67a774513215d7ba06384186dd441d9e/raw --output /usr/bin/slack

Автор скрипта: andkirby

Или скопировать содержимое скрипта и создать его самому:

#!/usr/bin/env bash
####################################################################################
# Slack Bash console script for sending messages.
####################################################################################
# Installation
#    $ curl -s https://gist.githubusercontent.com/andkirby/67a774513215d7ba06384186dd441d9e/raw --output /usr/bin/slack
#    $ chmod +x /usr/bin/slack
####################################################################################
# USAGE
# Send message to slack channel/user
#   Send a message to the channel #ch-01
#     $ slack '#ch-01' 'Some message here.'
#
#   Send a message to the channel #ch-01 and user @me.
#     $ slack '#ch-01,@me' MESSAGE
#
#   Send a message to the default channel (it must be declared in APP_SLACK_CHANNEL).
#     $ slack  MESSAGE
#
# VARIABLES
#
# Please declare environment variables:
#   - APP_SLACK_WEBHOOK
#   - APP_SLACK_CHANNEL (optional)
#   - APP_SLACK_USERNAME (optional)
#   - APP_SLACK_ICON_EMOJI (optional)
# You may also declare them in ~/.slackrc file.
####################################################################################

set -o pipefail
set -o errexit
set -o nounset
#set -o xtrace

init_params() {
  # you may declare ENV vars in /etc/profile.d/slack.sh
  if [ -z "${APP_SLACK_WEBHOOK:-}" ]; then
    echo 'error: Please configure Slack environment variable: ' > /dev/stderr
    echo '  APP_SLACK_WEBHOOK' > /dev/stderr
    exit 2
  fi

  APP_SLACK_USERNAME=${APP_SLACK_USERNAME:-$(hostname | cut --delimiter=. --fields=1)}
  APP_SLACK_ICON_EMOJI=${APP_SLACK_ICON_EMOJI:-:slack:}
  if [ -z "${1:-}" ]; then
    echo 'error: Missed required arguments.' > /dev/stderr
    echo 'note: Please follow this example:' > /dev/stderr
    echo '  $ slack.sh "#CHANNEL1,CHANNEL2" Some message here. ' > /dev/stderr
    exit 3
  fi

  slack_channels=(${APP_SLACK_CHANNEL:-})
  if [ "${1::1}" == '#' ] || [ "${1::1}" == '@' ]; then
    # explode by comma
    IFS=',' read -r -a slack_channels <<< "${1}"
    shift
  fi
  slack_message=${@}
}


send_message() {
  local channel=${1}
  echo 'Sending to '${channel}'...'
  curl --silent --data-urlencode \
    "$(printf 'payload={"text": "%s", "channel": "%s", "username": "%s", "as_user": "true", "link_names": "true", "icon_emoji": "%s" }' \
        "${slack_message}" \
        "${channel}" \
        "${APP_SLACK_USERNAME}" \
        "${APP_SLACK_ICON_EMOJI}" \
    )" \
    ${APP_SLACK_WEBHOOK} || true
  echo
}

send_message_to_channels() {
  for channel in "${slack_channels[@]:-}"; do
    send_message "${channel}"
  done
}

slack() {
  # Set magic variables for current file & dir
  __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  __file="${__dir}/$(basename "${BASH_SOURCE[0]}")"
  readonly __dir __file

  cd ${__dir}

  if [ -f $(cd; pwd)/.slackrc ]; then
    . $(cd; pwd)/.slackrc
  fi

  declare -a slack_channels

  init_params ${@}
  send_message_to_channels
}

if [ "${BASH_SOURCE[0]:-}" != "${0}" ]; then
  export -f slack
else
  slack ${@}
  exit $?
fi

Если вдруг WordPress "съел" кавычки, вот ZIP архив.

Для удобства создадим файл конфигурации:

vim ~/.slackrc

И скопируем в него следующее:

APP_SLACK_WEBHOOK=https://hooks.slack.com/services/AAAAAAAAA/BBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC
APP_SLACK_USERNAME=$(hostname)

Не забываем заменить webhook'у на свою

"APP_SLACK_USERNAME" — не обязательная опция, в данном примере в качестве имени отправителя будет имя сервера.

Пример отправки:

slack Hello!
Sending to ...
ok

И сообщение в Slack'е:

0 0 vote
Рейтинг статьи

Метки: Метки

Подписаться
Уведомление о
guest
0 комментариев
Inline Feedbacks
View all comments