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
↩