Gopherbot ist für die flexible Automatisierung und Orchestrierung von Infrastruktur- und Entwicklungsaufgaben für Slack 1- Teams konzipiert. Es unterstützt Skripte und Bibliotheken in Bash 2 , Python, Ruby und Go 3 mit einer dynamischen Pipeline-basierten Architektur, die komplexe mehrsprachige Arbeitsabläufe unterstützt. Die Kern-Engine bootet und aktualisiert einzelne Teamroboter aus einem Git-Repository, das Konfigurationen (hauptsächlich YAML), Skripte und Bibliotheken für die Automatisierung enthält, mit einer einfachen Roboter-API für jede Sprache, die chatbasierte Interaktionen, Statusverfolgung und Parallelität drastisch vereinfacht.
In Betracht gezogene Slogans:
Gopherbot läuft als Linux-Prozess auf einem Server/einer VM oder einem Container in Ihrer Infrastruktur. Beim Start untersucht es einige Umgebungsvariablen, die zum Abrufen des Git-Repositorys und der verschlüsselten Anmeldeinformationen Ihres Roboters erforderlich sind, und stellt dann eine Verbindung zu Ihrem Team-Chat her. Von dort aus kann es auf CLI-ähnliche Befehle reagieren, die regulären Ausdrücken entsprechen, deren Capture-Gruppen als Befehlszeilenargumente an in Bash, Ruby, Python oder Go 4 geschriebene Skripte übergeben werden. Diese Plugins können eine beliebige Anzahl von Funktionen ausführen, um Ressourcen bereitzustellen, Berichte auszuführen, Software bereitzustellen oder mit CI/CD zu interagieren – praktisch jede Funktionalität, die ein DevOps-Ingenieur im Team-Chat bereitstellen möchte. Die meisten Roboter führen auch eine beliebige Anzahl von Automatisierungs-„Jobs“ aus, die entweder mit der integrierten Cron-Funktion geplant oder durch bestimmte externe Nachrichten ausgelöst werden, die von anderen externen automatisierten Aufgaben gesendet werden, z. B. eine „Build Complete“-Benachrichtigung von CI/CD oder eine Commit-Nachricht von GitHub. Viele weitere Informationen finden Sie in der Einleitung des Online-Handbuchs.
Die neueste Dokumentation finden Sie immer im von GitHub gehosteten Online-Handbuch. Die Dokumentationsquelle befindet sich in einem separaten Repository. Die automatisch aus den Go-Quellen generierte Dokumentation finden Sie unter pkg.go.dev.
Das Handbuch ist noch sehr unvollständig; Manchmal ist jedoch Beispielcode die beste Dokumentation. Zu diesem Zweck ist Mr. Data (inzwischen im Ruhestand) der leistungsstärkste und vollständigste Roboter, den ich habe – der Roboter, der meinen Kubernetes-Heimcluster betrieb, als ich noch Zeit für solche Dinge hatte. Clu ist der Entwicklungsroboter, der für die Entwicklung und das Schreiben von Dokumentationen verwendet wird. Obwohl Clu keine nützliche Arbeit leistet, verfügt er über Beispiele für die meisten Facetten der Gopherbot -Funktionalität. Floyd (ein Utility-Roboter, den ich mit meiner Frau geteilt habe) ist die älteste und am längsten laufende Roboterinstanz, obwohl er in den Ruhestand ging, nachdem AWS begann, Gebühren für seine IP-Adresse zu erheben.
Version 2 läuft bei mir seit über einem Jahr stabil und wurde nun endlich veröffentlicht. Ich habe akzeptiert, dass ein vollständig aktuelles Handbuch erheblich hinterherhinken wird, aber gerade dort wird derzeit am meisten gearbeitet. Version 3 wird für das erste Quartal 2025 erwartet. Die Hauptfunktionen sind die Unterstützung dynamischer Go-Erweiterungen (bereits in Version 2.15.0 verfügbar) und die Migration aller Kernfunktionen in dynamische Go-Erweiterungen, um Bootstrapping-Abhängigkeiten zu reduzieren.
Wenn Sie über Docker verfügen, können Sie den Standardroboter, der den Terminal- Anschluss ausführt, auf die Probe stellen:
$ 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
...
Eine ausführlichere Vorschau von Gopherbot in der IDE finden Sie im Vorschauabschnitt im Online-Handbuch.
Sie können den neuesten Release-Build von der Release-Seite herunterladen. Aktuelle Container-Builds finden Sie in der GitHub Container Registry.
Gopherbot CI/CD-Pipelines erstellen zwei Containervarianten:
ghcr.io/lnxjedi/gopherbot
gopherbot
ist ein relativ minimaler Gopherbot-Container für den Betrieb eines Produktionscontainerrobotersghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
verwendet OpenVSCode Server als Einstiegspunkt und ist für die Einrichtung und Entwicklung von Erweiterungen für Ihre Roboter 5 vorgesehen Das Erstellen aus dem Quellcode ist genauso einfach wie make dist
mit dem Makefile
, solange das Build-System alle Anforderungen erfüllt.
Anforderungen:
Schritte:
git checkout v2.6.2.1
make dist
im Repository-Root, um ein installierbares Archiv zu erstellen, oder einfach make
um die Binärdateien zu erstellenDieses Beispieltranskript ist etwas veraltet und zeigt nicht die neue Jobfunktionalität, die in Version 2 eingeführt wurde – aber Gopherbot weiß immer noch, wie man Witze erzählt.
Die Windows- und Darwin-Ports (MacOS) wurden beide entfernt. Die beste Lösung für diese Plattformen besteht darin, die hervorragende Linux-Container-Unterstützung zu nutzen, um Ihren Roboter in einem Container auszuführen, möglicherweise mit Docker Desktop. WSL ist auch eine gute Lösung für 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
PR ist willkommen. Für Entwicklung, Tests und Zusammenarbeit schreiben Sie mir gerne eine E-Mail für eine Einladung zum LinuxJedi Slack-Team.
Gopherbot verfügt über eine modulare Schnittstelle zum Schreiben anderer Protokollkonnektoren in Go; Derzeit werden nur Slack und der Terminal-Connector unterstützt ↩
Die aktuelle Bash-Bibliothek unterstützt keine Langzeitspeicher, für Version 3 ist jedoch eine begrenzte Unterstützung geplant ↩
Seit Version 2.15 unterstützt Gopherbot dynamisch geladene Go-Erweiterungen über Yaegi, es werden jedoch nur stdlib und die Gopherbot-API unterstützt ↩
Go ist die Ausnahme von diesem Muster; Stattdessen definieren Go-Erweiterungen Handler-Funktionen, denen ein „Roboter“-Objekt und String-Argumente übergeben werden. ↩
Beachten Sie, dass der Entwicklungscontainer immer den neuesten Code in /opt/gopherbot
enthält – Sie können beispielsweise cd /opt/gopherbot; git checkout v2.6.2.1; make
↩