Gopherbot 专为 Slack 1团队的基础设施和开发任务的灵活自动化和编排而设计。它支持 Bash 2 、Python、Ruby 和 Go 3中的脚本和库,并具有支持复杂的多语言工作流程的基于动态管道的架构。核心引擎从包含用于自动化的配置(主要是 YAML)、脚本和库的 git 存储库引导和更新各个团队机器人,并为每种语言提供简单的机器人 API,大大简化了基于聊天的交互、状态跟踪和并发性。
正在考虑的口号:
Gopherbot作为 Linux 进程在基础设施中的服务器/虚拟机或容器上运行。启动时,它会检查检索机器人的 git 存储库和加密凭据所需的一些环境变量,然后连接到您的团队聊天。从那里,它可以响应与正则表达式匹配的类似 CLI 的命令,这些正则表达式的捕获组作为命令行参数传递给用 Bash、Ruby、Python 或 Go 4编写的脚本。这些插件可以执行任意数量的功能来配置资源、运行报告、部署软件或与 CI/CD 交互 - 几乎是 DevOps 工程师可能希望在团队聊天中提供的任何功能。大多数机器人还执行任意数量的自动化“作业”,要么使用内置的 cron 工具进行调度,要么由其他外部自动化任务发布的特定外部消息触发,例如来自 CI/CD 的“构建完成”通知或来自GitHub。您可以在在线手册的介绍中找到更多信息。
最新文档始终可以在 GitHub 托管的在线手册中找到;文档源位于单独的存储库中。从 Go 源代码自动生成的文档可以在 pkg.go.dev 中找到。
该手册还很不完整;然而,有时最好的文档是示例代码。为此,我拥有的最强大、最完整的机器人是 Mr. Data(现已退休)——当我还有时间做这些事情时,这个机器人就运行了我的家庭 Kubernetes 集群。 Clu是用于开发和编写文档的开发机器人。尽管Clu没有做任何有用的工作,但他提供了Gopherbot功能大多数方面的示例。 Floyd(我与妻子共享的实用机器人)是最古老且运行时间最长的机器人实例,尽管在 AWS 开始对其 IP 地址收费后他就退休了。
版本 2 对我来说稳定了一年多,终于发布了。我承认完全最新的手册会明显滞后,但这是目前正在进行的最多工作的地方。版本 3 预计于 2025 年第一季度发布,主要功能是动态 Go 扩展支持(已在 v2.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
...
要在IDE中更全面地预览 Gopherbot,请参阅在线手册中的预览部分。
您可以从发布页面下载最新的发布版本。最新的容器构建可以在 GitHub 容器注册表中找到。
Gopherbot CI/CD 管道创建两个容器变体:
ghcr.io/lnxjedi/gopherbot
gopherbot
是一个相当小的 gopherbot 容器,用于运行生产容器化机器人ghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
使用 OpenVSCode Server 作为入口点,旨在用于设置和开发机器人的扩展5 只要构建系统满足所有要求,从源代码构建就像使用Makefile
进行make dist
一样简单。
要求:
步骤:
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 库不支持长期记忆,但计划对 v3 提供有限支持 ↩
从 2.15 版本开始,Gopherbot 支持通过 Yaegi 动态加载 Go 扩展,但仅支持 stdlib 和 Gopherbot API ↩
Go 是这种模式的例外;相反,Go 扩展定义了传递“机器人”对象和字符串参数的处理程序函数。 ↩
请注意,开发容器始终包含/opt/gopherbot
中的最新代码 - 您可能需要例如cd /opt/gopherbot; git checkout v2.6.2.1; make
↩