Gopherbot предназначен для гибкой автоматизации и оркестрации инфраструктуры и задач разработки для команд Slack 1 . Он поддерживает сценарии и библиотеки в Bash 2 , Python, Ruby и Go 3 , а динамическая конвейерная архитектура поддерживает сложные многоязычные рабочие процессы. Основной движок загружает и обновляет отдельных командных роботов из репозитория git, содержащего конфигурацию (в основном YAML), сценарии и библиотеки, используемые для автоматизации, с простым API-интерфейсом робота для каждого языка, который значительно упрощает взаимодействие в чате, отслеживание состояния и параллелизм.
Лозунги на рассмотрении:
Gopherbot работает как процесс Linux на сервере/виртуальной машине или контейнере в вашей инфраструктуре. При запуске он проверяет несколько переменных среды, необходимых для получения git-репозитория вашего робота и зашифрованных учетных данных, а затем подключается к вашему командному чату. Отсюда он может отвечать на команды CLI, соответствующие регулярным выражениям, группы захвата которых передаются в качестве аргументов командной строки сценариям, написанным на Bash, Ruby, Python или Go 4 . Эти плагины могут выполнять любое количество функций по предоставлению ресурсов, созданию отчетов, развертыванию программного обеспечения или взаимодействию с CI/CD — практически любую функциональность, которую DevOps-инженер может захотеть предоставить в командном чате. Большинство роботов также выполняют любое количество «заданий» автоматизации, либо запланированных с помощью встроенной функции cron, либо запускаемых конкретными внешними сообщениями, отправленными из других внешних автоматизированных задач, таких как уведомление о завершении сборки от CI/CD или сообщение о фиксации от Гитхаб. Более подробную информацию вы можете найти во введении к онлайн-руководству.
Последнюю версию документации всегда можно найти в онлайн-руководстве, размещенном на GitHub; источник документации находится в отдельном репозитории. Документацию, автоматически созданную из исходников Go, можно найти по адресу pkg.go.dev.
Руководство все еще очень неполное; однако иногда лучшая документация — это пример кода. Для этого самым мощным и совершенным роботом, который у меня есть, является Mr. Data (сейчас на пенсии) — робот, который управлял моим домашним кластером Kubernetes, когда у меня еще было время на подобные вещи. Clu — это робот-разработчик, используемый для разработки и написания документации. Хотя Клу не выполняет никакой полезной работы, у него есть примеры большинства аспектов функциональности Gopherbot . Флойд (служебный робот, которым я делился с женой) — самый старый и самый продолжительный экземпляр робота, хотя он ушел на пенсию после того, как AWS начала взимать плату за его IP-адрес.
Версия 2 была для меня стабильной уже больше года и наконец-то выпущена. Я согласен с тем, что полностью обновленное руководство будет значительно отставать, но в настоящее время именно над этим ведется большая часть работы. Выход версии 3 ожидается в первом квартале 2025 года, при этом основными функциями будут поддержка динамических расширений Go (уже доступна в версии 2.15.0) и перенос всех основных функций в динамические расширения Go для уменьшения зависимостей при загрузке.
Если у вас есть Docker, вы можете поработать с роботом по умолчанию, использующим терминальный соединитель:
$ docker run -it --rm ghcr.io/lnxjedi/gopherbot
...
Terminal connector running; Type '|c?' to list channels, '|u?' to list users
...
general: *******
general: Welcome to the *Gopherbot* terminal connector. Since no configuration was
detected, you're connected to 'floyd', the default robot.
general: If you've started the robot by mistake, just hit ctrl-D to exit and try
'gopherbot --help'; otherwise feel free to play around with the default robot - you
can start by typing 'help'. If you'd like to start configuring a new robot, type:
';setup slack'.
c:general/u:alice -> help
...
Более подробную информацию о предварительном просмотре Gopherbot в IDE см. в разделе предварительного просмотра онлайн-руководства.
Вы можете скачать последнюю версию сборки со страницы выпуска. Актуальные сборки контейнеров можно найти в реестре контейнеров GitHub.
Конвейеры Gopherbot CI/CD создают два варианта контейнера:
ghcr.io/lnxjedi/gopherbot
gopherbot
— это довольно минимальный контейнер gopherbot для запуска производственного контейнерного робота.ghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
использует сервер OpenVSCode в качестве точки входа и предназначен для использования при настройке и разработке расширений для ваших роботов 5. Сборка из исходного кода так же проста, как и make dist
с помощью Makefile
, при условии, что система сборки соответствует всем требованиям.
Требования:
Шаги:
git checkout v2.6.2.1
make dist
в корне репозитория, чтобы создать устанавливаемый архив, или просто make
для сборки двоичных файлов.Этот пример стенограммы немного устарел и не демонстрирует новые функциональные возможности работы, представленные в версии 2, но Gopherbot все еще умеет рассказывать анекдоты.
Порты Windows и Darwin (MacOS) были удалены. Лучшее решение для этих платформ — воспользоваться превосходной поддержкой контейнеров Linux для запуска вашего робота в контейнере, возможно, с помощью Docker Desktop. WSL также является хорошим решением для Windows.
#!/usr/bin/ruby
require 'net/http'
require 'json'
require 'gopherbot_v1'
bot = Robot . new ( )
defaultConfig = <<'DEFCONFIG'
Help:
- Keywords: [ "weather" ]
Helptext: [ "(bot), weather in <city(,country) or zip code> - fetch the weather from OpenWeatherMap" ]
CommandMatchers:
- Command: weather
Regex: '(?i:weather (?:in|for) (.+))'
DEFCONFIG
# NOTE: the required environment variables need to be supplied as
# `Parameters` for the `weather` plugin in custom/conf/robot.yaml.
# The API key should be encrypted.
command = ARGV . shift ( )
case command
when "configure"
puts defaultConfig
exit
when "weather"
location = ARGV . shift ( )
location += ", #{ ENV [ "DEFAULT_COUNTRY" ] } " unless location . include? ( ',' )
uri = URI ( "http://api.openweathermap.org/data/2.5/weather?q= #{ location } &units= #{ ENV [ "TEMP_UNITS" ] } &APPID= #{ ENV [ "OWM_APIKEY" ] } " )
d = JSON :: parse ( Net :: HTTP . get ( uri ) )
if d [ "message" ]
bot . Say ( "Sorry: " #{ d [ "message" ] } " , maybe try the zip code?" )
else
w = d [ "weather" ] [ 0 ]
t = d [ "main" ]
bot . Say ( "The weather in #{ d [ "name" ] } is currently " #{ w [ "description" ] } " and #{ t [ "temp" ] } degrees, with a forecast low of #{ t [ "temp_min" ] } and high of #{ t [ "temp_max" ] } " )
end
end
Пиар приветствуется. По вопросам разработки, тестирования и сотрудничества напишите мне электронное письмо с приглашением в команду LinuxJedi Slack.
Gopherbot имеет модульный интерфейс для написания других коннекторов протоколов на Go; в настоящее время поддерживаются только Slack и разъем терминала ↩
Текущая библиотека bash не поддерживает долговременную память, хотя для версии 3 запланирована ограниченная поддержка ↩
Начиная с версии 2.15, Gopherbot поддерживает динамически загружаемые расширения Go через Yaegi, но поддерживаются только stdlib и Gopherbot API ↩
Го является исключением из этого правила; вместо этого расширения Go определяют функции-обработчики, которым передаются объект «робот» и строковые аргументы. ↩
Обратите внимание, что контейнер разработки всегда содержит самый последний код в /opt/gopherbot
— вы можете захотеть, например, cd /opt/gopherbot; git checkout v2.6.2.1; make
↩