Этот слабый бот улучшает рабочий процесс команд разработчиков. Особенно с акцентом на Дженкинса, Гитуба, Гитлаба и Джиры, поскольку интеграция работает из коробки. Но также пользовательские команды, макросы, Кроны и другие команды, специфичные для проекта, могут быть реализованы простым и гибким способом.
_metadata :
major_version : 1
minor_version : 1
display_information :
name : slack_bot
background_color : " #382e38 "
features :
app_home :
messages_tab_enabled : true
messages_tab_read_only_enabled : false
bot_user :
display_name : bot
always_online : true
oauth_config :
scopes :
bot :
- app_mentions:read
- channels:read
- channels:history
- groups:history
- chat:write
- im:history
- im:write
- mpim:history
- reactions:read
- reactions:write
- users:read
- files:read
- pins:write
settings :
event_subscriptions :
bot_events :
- app_mention
- message.im
interactivity :
is_enabled : true
org_deploy_enabled : false
socket_mode_enabled : true
token_rotation_enabled : false Сначала подготовьте config.yaml , просто посмотрите на config-example.yaml
go run github.com/innogames/slack-bot/v2/cmd/botdocker-compose upgo run cmd/bot/main.go или make run для запуска приложения GO Как пользователь Slack, вам просто нужно отправить личное сообщение пользователю/приложению BOT, содержащему команду для выполнения. Кроме того, вы можете добавить бот в любой канал и выполнить в нем команды бота, префиксив свою команду с помощью @bot_name, например @slack-bot start job DailyDeployment
Примечание. Вы должны пригласить бота в канал, чтобы иметь возможность обрабатывать команды.
Команда help просто печатает список всех доступных команд этого бота. С помощью help *command* Вы получите краткое описание и некоторые примеры для одной команды.

Бот может начать и контролировать работу Дженкинса простым, но мощным способом.
По умолчанию команды недоступны и не видны в «справке», пока «jenkins.host» не будет определен в файле конфигурации.
Команда start job начинает работу Дженкинса и показывает текущий прогресс. Внимание: только работы в белом списке в конфигурации начинаются!
Кроме того, каждое задание может иметь настраиваемый trigger , который позволяет создавать пользовательские команды для запуска заданий. (Это regexp, которая учитывает имена параметров). Например, «Начать ежедневное развертывание» может стать триггером для одной работы Дженкинса. Отправка этого текста боту начнет работу.
После начала работы бот покажет предполагаемое время сборки и некоторые кнопки действий. Там вы можете открыть журналы или прервать сборку напрямую.
Бот также способен проанализировать параметры и имена ветвей поиска, используя поиск нечеткой ветви.
Примеры:
trigger job DeployBetastart job BackendTests TEST-123 (поиск полного имени ветви, содержащего Test-123. Например, функция/тест-123 с добавленной функцией-456) 

Бот также имеет возможность создать однократные уведомления для сборки Дженкинса. Это может быть полезно для продолжительных работ, где разработчики ждут результата.
Пример:
inform me about build NightlyTests (смотрит на самые последние беговые сборки)inform me about build MyJobName #423 (укажите номер сборки)inform job MyJobName (альтернативный синтаксис)Получите сообщения Slack для всех сборов процесса для данной работы:
Пример:
watch JenkinsSelfCheck уведомляет о любой сборке работы JenkinsSelfCheckunwatch JenkinsSelfCheckНебольшая команда, чтобы отключить/включить выполнение задания на стороне Дженкинса.
Пример:
disable job NightlyTests (отключить работу на Дженкинсе)enable job NightlyTestsКогда сборка не удалась, вы сможете повторить любую сборку:
Пример:
retry build NightlyTests (повторно построить последнюю работу)retry build NightlyTests #100 (повторно дайте данную сборку) jenkins nodes перечисляют все доступные узлы Jenkins. Статус онлайн/офлайн и количество исполнителей видны. 
Если вы просто вставите ссылку на запрос GitHub/Gitlab/Bitbucket/Stash Pull, бот будет отслеживать состояние билета!
Вы также можете установить пользовательские «утвержденные» реакции. Например, чтобы увидеть, кто или какой компонент/отдел одобрил запрос на притяжение, вы можете использовать имя реакции или каталог символов Unicode
pullrequest :
reactions :
merged : custom_merge_arrow
review : ?
custom_approve_reaction :
nerdydev : " approved_backend "
iamamobiledev : " approved_mobile "
iamamobiledev2 : " approved_mobile " 
Дополнительные функции: для Bitbucket бот может извлечь текущее состояние сборки (например, из Jenkins/Bamboo и т. Д.) И показывать не удаленные и бегущие сборки (пожарная реакция) в качестве реакции (реакция кругового стрелка). Когда сборка стабильная, реакции сборки исчезают. 
Команда queue ( then с псевдонимом) способна стоять в очереди данной командой, пока не закончена команда запуска в настоящее время.
Пример следующего сценария: у вас есть работа по сборке (которая может занять несколько минут) и работа развертывания, которая опирается на артефакты сборки. Теперь вы можете сделать:
trigger job Build feature1234 чтобы начать работу сборки с данным филиаломqueue trigger job DeployBranch feature1234queue reply Deployment is done!Другой пример:
delay 1hthen send message #backend coffee time?Чтобы увидеть все выполненные фоновые команды (например, задание Jenkins или PR Watcher) Используйте эту команду:
list queueБот может запросить информацию из JIRA, либо из одного билета, либо из целого списка билетов.
По умолчанию команды недоступны и не видны в «справке», пока «jira.host» не будет определен в файле конфигурации.
Примеры
jira TEST-1234jira 1242 (открывает билет, используя настроенный проект JIRA по умолчанию)jql type=bug and status=open (по умолчанию используйте проект по умолчанию)jira "Second city" (текстовый поиск билетов в проекте по умолчанию) 

Также можно получить уведомление, когда произойдет изменение государства в определенном билете JIRA.
Пример
watch ticket PROJ-12234Можно создать кнопки, которые выполняют любое действие бота при нажатии кнопки. Слабые взаимодействия

Примеры:
add button "Start Deployment" "trigger job LiveDeployment"Примечание
Настройте пользовательские переменные для настройки поведения бота. Например, у каждого разработчика есть собственная среда сервера.
Пример: наличие этой глобальной конфигурации:
commands :
- name : Deploy
trigger : " deploy (?P<branch>.*) "
commands :
- deploy {{.branch}} to {{ customVariable "defaultServer" }} Каждый разработчик теперь может позвонить, как только эти команды, такие как: set variable defaultSerer foobarX.local чтобы зарегистрировать пользовательский «DefaultServer».
Когда сейчас вызовет deploy mater , он развернет master филиал на foobarX.local Server.
Еще один пример здесь расширенная версия, которая использует шаблоны GO. В конце концов, команда будет генерировать одну подкоманду, например: reply <!here> demo for <https://jira.example.com/TEST-1234|TEST-1234: Example-Ticket> , который опубликует ссылку на канал Slack.
- name : demo
trigger : " demo (?P<ticketId> \ w+- \ d+) "
commands :
- |
{{ $ticket := jiraTicket .ticketId }}
{{ if $ticket }}
reply <!here> demo for <{{ jiraTicketUrl $ticket.Key }}|{{ $ticket.Key }}: {{ $ticket.Fields.Summary }}>
{{ else }}
reply Ticket {{ .ticketId }} not found :white_frowning_face:
{{ end }}
description : Informs the current channel about a demo of a Jira ticket. It directly posts a link to the ticket
examples :
- demo XYZ-1232 Пользователь может определить свою среду по умолчанию один раз, используя set variable serverEnvironment aws-02 .
Затем deploy feature-123 развернет филиал в определенную среду aws-02 . Каждый пользователь может определить свои собственные переменные.
Также возможно вести чат, как разговор с официальной интеграцией Openai (GPT3.5)!

Просто введите «openai» или «Chatgpt» перед вашим вопросом, чтобы создать новую ветку, которая ведет себя как известная страница Chatgpt. Содержание последних 10 сообщений используется в качестве контекста. Чтобы это работало, в конфигурации должно быть предусмотрено действительное «openai.api_key».
Расширенная конфигурация:
openai :
api_key : " sk-123....789 "
initial_system_message : " You are a Slack bot for Project XYZ, please answer shortly. "
update_interval : ' 3s ' # fewer Slack messages update during generation
model : gpt-3.5-turbo
temperature : 0.8
log_texts : true # opt in: log all input/output text to the logПри использовании команды «Openai XXX» в существующем потоке предыдущие сообщения используются в качестве контекста для дальнейших вызовов.
Также можно использовать функцию в шаблонах (например, в пользовательских командах или кронах).
{{ openai "Say some short welcome words to @Jon_Doe"}} печатает что -то вроде Hello Jon, welcome! How can I assist you today?
Бот также способен генерировать изображения с помощью Dall-E. Просто префикс, который вы подсказываете с «Dalle», и бот будет генерировать изображение на основе вашего текста.

Если вам нужен небольшой перерыв, и вы хотите сыграть в небольшую игру викторины, вы можете сделать это, позвонив по этой команде. Разрешено не более 50 вопросов. Вопросы из разных категорий и трудных уровней и являются либо множественным выбором, либо истинными/ложными вопросами.
Команды
quiz 10 чтобы начать тест с 10 вопросамиanswer 1 чтобы ответить на вопрос с первым ответом 
Можно настроить OpenWeatherMap, чтобы получить информацию о текущей погоде в вашем месте.

Пример конфигурации:
open_weather :
apikey : " 612325WD623562376678 "
location : " Hamburg, DE "
units : " metric " Каждый пользователь может определить собственные псевдонимы команд. Это удобная функция, чтобы избежать печати одной и той же команды каждый день.
Пример использования
list commands , чтобы просто перечислить определенные команды для текущего пользователяadd command 'myCommand' 'trigger job RestoreWorld 7 -> Затем просто позвоните myCommand позжеadd command 'build master' 'trigger job Deploy master ; then trigger job DeployClient master'delete command 'build master'myCommand , чтобы вызвать эту задачу Jenkins 
Определенные «команды» (бывшие называемые «макросы») очень волшебны и могут быть определены в файлах конфигурации YAML.
У них есть триггер (регулярное выражение) и имеют список под команд, которые будут выполнены. Они принимают во внимание группы параметров из Regexp - поэтому они могут быть очень гибкими!
Один простой пример, чтобы начать две задачи Jenkins с данным названием филиала одновременно:
commands :
- name : build clients
trigger : " build clients (?P<branch>.*) "
commands :
- " reply I'll build {{ .branch }} for you "
- " trigger job BuildFrontendClient {{ .branch }} "
- " trigger job BuildMobileClient {{ .branch }} "
- " then reply done! :checkmark: " 
ПРИМЕЧАНИЕ . В командах вы можете использовать полный набор шаблонов функций GO -> Петли/условия возможны!
Помимо обычных характеристик шаблона Go, в шаблоне доступны куча специфических команд BOT.
Список всех доступных функций (с аргументами и типами возврата) может быть сгенерирован с использованием команды list template functions . 
Примечание. Эти функции шаблона могут использоваться в разных командах/функциях:
С retry или repeat вашу последнюю выполненную команду будет повторно выполнена. -> Полезно, когда была исправлена неудачная работа Дженкинса.
Небольшая команда, которая может быть полезна в сочетании с командой command или как крючком для заданий Jenkins.
Пример команды: delay 10m trigger job DeployWorldwide
В качестве ответа вы получите команду, чтобы остановить работу в очереди (например stop timer 123456 ). Поскольку каждый может отправить команду, команда может быть использована для объявления развертывания и, в связи с тем, что выполнение все еще может быть остановлено всеми.
reply и send message также являются небольшими командами, которые полезны в сочетании с command или крючками Jenkins.
Примеры:
send message to #backend The job failed :panic:delay 10m send message to @peter_pan I should notify you to...Простая команда, если вы не можете выбрать между разными параметрами
Примеры
random Pizza Pasta -> Произвести "пиццу" или "макароны"random Peter Paul Tom Jan -> Кто должен принять сегодня организацию еды сегодня?config.yaml (вы можете посмотреть на config.example.yaml ) Эта команда запустит бот, используя файл config.yaml по умолчанию. Используйте аргумент -config для использования файла конфигурации из другого места.
go run cmd/bot/main.go
Внимание : сначала создайте файл config.yaml
docker-compose up
Конфигурация управляется с помощью простых файлов .yaml, которые хранят учетные данные для внешних служб, пользовательских команд и т. Д.
Самый простой способ состоит в том, чтобы просто иметь один файл config.yaml со всеми необходимыми параметрами, config.yaml загружается по умолчанию. Также можно разделить конфигурацию на несколько файлов.
Структура примера с несколькими файлами конфигурации:
secret.yaml содержащий учетные данные для внешних услуг (Slack, Jenkins) - может управляться Puppet/Ansible и т. Д.jenkins.yaml Конфигурация работы Jenkins и их параметры и т. Д.project-X.yaml пользовательские команды для конкретной командыproject-Y.yaml Чтобы загрузить несколько файлов конфигурации, используйте go run cmd/bot/main.go -config /path/to/config/*.yaml который объединил все конфигурации вместе.
Чтобы запустить этот бот, вам нужен «токен бота» для вашего приложения Slack. Смотрите раздел установки о том, как создать правильное приложение с необходимыми токенами.
Чтобы иметь возможность запустить или контролировать задание Jenkins, вы должны сначала настроить хоста и учетные данные. Пользователь нуждается в прочтении доступа к заданиям и праву запускать задания для ваших рабочих мест в белом списке.
jenkins :
host : https://jenkins.example.de
username : jenkinsuser
password : secretЧтобы иметь возможность начать работу, задание и ее параметры должны быть определены в конфигурации.
Работа без какого -либо параметра выглядит очень просто:
jenkins :
jobs :
CleanupJob : Тогда вы можете использовать trigger job CleanupJob или start job CleanupJob чтобы начать работу. Он также уведомит вас, когда задание преуспевает или не удалось (в том числе журнал ошибок).
Далее, работа с двумя параметрами:
jenkins :
jobs :
RunTests :
parameters :
- name : BRANCH
default : master
type : branch
- name : GROUP
default : allЭта работа может обрабатывать два параметра:
Если вы настраиваете VSC в конфигурации, вам не нужно передавать полное имя ветви, но вы можете использовать нечеткий поиск.
Пример:
start job RunTests начнут «все» группы в главном филиалеstart job JIRA-1224 unit попытается найти соответствующий филиал для номера билета. (Сообщение об ошибке, если нет уникальных результатов поиска!)Теперь более сложный пример с большим количеством магии:
jenkins :
jobs :
DeployBranch :
trigger : " deploy (?P<BRANCH>[ \ w \ -_ \ . \ /]*) to (?P<ENVIRONMENT>prod|test|dev) "
parameters :
- name : BRANCH
default : master
type : branch
- name : ENVIRONMENT
onsuccess :
- reply Tadaa : Take a look on http://{{ .ENVIRONMENT }}.example.com Шаг за шагом: trigger является регулярным выражением для начала задания, которое может содержать названные группы. Группы Regexp будут автоматически сопоставлены с параметрами задания.
Затем вы можете использовать deploy bugfix-1234 to test чтобы запустить задание Jenkins.
Примечание. Вы всегда можете начать эту работу также через start job DeployBranch master . trigger - это просто альтернатива.
onsuccess - это крючок, который будет выполняться, когда работа будет запущена через этого бота. Кроме того, также доступны onsuccess и onerror ... например, для отправки пользовательских сообщений об ошибках.
Можно определить периодические команды через Crons, используя библиотеку Robfig/Cron.
Пример конфигурации
crons :
- schedule : " 0 8 * * * "
commands :
- trigger job BuildClients
- then deploy master to staging
channel : " #backend " Чтобы иметь возможность разрешить имена ветвей в триггере Jenkins, может быть настроена система VCS (в настоящее время это просто схватка/Bitbucket).
vcs :
type : bitbucket
host : https://bitbucket.example.com
username : readonlyuser
password : secret
project : MyProjectKey
repository : repo_nameЕсли конфигурация не предусмотрена, автоматизированный поиск ветвей, а параметры «ветвь» передаются 1: 1 заданию Jenkins.
Некоторые функции могут не понадобиться в вашей среде. Большинство не активны, если учетные данные не предоставляются, как для Jira или Bitbucket.
Некоторые другие можно отключить через конфигурацию:
games :
enabled : false
custom_commands :
enabled : false
custom_variables :
enabled : falsebot/ содержит классы кода бота: подключение к Slack, управление пользователями, сопоставление команд ...cmd/bot/ TOPES TOPERcommand/ реальная команда реализует интерфейс Bot.command Если вам нужна новая команда, которая не может реализовать с командой «Команда», вы должны записать код GO.
Существует удобное приложение CLI, которое эмулирует приложение Slack ... просто общайтесь с местной консоли без какого -либо слабых соединений! 
make run-cli
make air , чтобы использовать «инструмент Air Auto Reload».
Есть куча тестов, которые можно выполнить через:
make test
Тестовое покрытие генерируется для сборки/покрытия.html
make test-coverage