Gort ist ein Chatbot-Framework, das von Grund auf für Chatops entwickelt wurde.
Gort bringt die Leistungsfähigkeit der Befehlszeile an den Ort, an dem Sie mit Ihrem Team zusammenarbeiten: Ihr Chat-Fenster. Dank der unbegrenzten Befehlspaketunterstützung können Entwickler Funktionen in der Sprache ihrer Wahl implementieren, während die leistungsstarke Zugriffskontrolle dafür sorgt, dass Sie selbst bei den sensibelsten Aufgaben vertrauensvoll zusammenarbeiten können. Der Fokus auf Erweiterbarkeit und Anpassungsfähigkeit bedeutet, dass Sie schnell auf Unerwartetes reagieren können, ohne dass Ihr Team die Sichtbarkeit verliert.
Die offizielle Dokumentation finden Sie hier: The Gort Guide.
Gort war ursprünglich als Go-Neuimplementierung von Cog von Operable konzipiert, und obwohl es stark von Cog inspiriert ist, ist Gort weitgehend seinen eigenen Weg gegangen.
Während unserer ersten Designbesprechung stellten wir fest, dass viele Funktionen von Cog, so innovativ sie auch sein mögen, weitgehend ungenutzt blieben und die Codebasis schwierig zu erweitern und zu warten war. Darüber hinaus gab es für die Implementierungssprache Elixir relativ wenige kompetente Entwickler. Die Lösung, die viele Monate lang im Cog-Slack-Workspace diskutiert wurde, bestand darin, Cog in Go von Grund auf neu zu schreiben, einige weniger genutzte Funktionen zu entfernen und dabei die Komplexität zu reduzieren.
Dies gab uns die Gelegenheit, darüber nachzudenken und möglicherweise neu zu definieren, was Cog sein sollte. Die Funktionen auswählen, die sinnvoll sind, und diejenigen verwerfen, die keinen Sinn machen. Auf diese Weise kann Gort eher als „spiritueller Nachfolger“ von Cog denn als getreue Neuimplementierung beschrieben werden.
Die Designphilosophie von Gort legt Wert auf Flexibilität und Sicherheit, indem sie es Ihnen ermöglicht, Befehle in jeder gewünschten Sprache zu erstellen, indem Sie Tools verwenden, mit denen Sie bereits vertraut sind, und genau steuern können, wer sie wie verwenden darf.
Genauer gesagt:
Jedes davon wird im Folgenden ausführlicher beschrieben.
Benutzer interagieren mit Gort hauptsächlich über Befehle , die durch ein Befehlszeichen (standardmäßig !
) ausgelöst werden, ansonsten aber konzeptionell identisch mit Befehlen sind, die über die Befehlszeile eingegeben werden.
Die Verwendung eines echo
-Befehls könnte beispielsweise wie folgt aussehen:
Wie gezeigt, wird die Ausgabe erfolgreicher Befehle von Gort zurückgeleitet.
Weitere Informationen zu Befehlen finden Sie im Gort-Handbuch:
Gort-Befehle werden als Container-Images erstellt, was bedeutet, dass Sie sie in jeder Sprache erstellen können, mit der Sie vertraut sind.
Da Ihre ausführbare Datei außerdem alle Chat-Eingaben genau so empfängt, als ob sie in der Befehlszeile eingegeben würden, können Sie jeden gewünschten Befehlszeileninterpreter verwenden. Befehle können sogar als Bash-Skripte implementiert werden oder vorhandene Befehle wie curl
verwenden!
Weitere Informationen zum Schreiben von Befehlen finden Sie im Gort-Handbuch:
In Gort kann ein Satz von einem oder mehreren zusammengehörigen Befehlen als „Befehlspaket“ installiert werden.
In YAML wird ein Bundle dargestellt, das angibt, welche ausführbare Datei für jeden Befehl verwendet werden soll und wer jeden Befehl ausführen darf.
Eine sehr einfache Bundle-Datei ist unten dargestellt.
---
gort_bundle_version : 1
name : echo
version : 0.0.1
image : ubuntu:20.04
author : Matt Titmus
homepage : https://guide.getgort.io
description : A test bundle.
long_description : |-
This is an example bundle. It lets you echo text using the "echo"
command that's built into Ubuntu 20.04.
permissions :
- can_echo
commands :
echo :
description : " Echos back anything sent to it. "
executable : [ "/bin/echo" ]
rules :
- must have echo:can_echo
Dies zeigt ein Bundle namens echo
, das einen Befehl (auch echo
genannt) und eine Berechtigung namens can_echo
definiert. Nach der Installation kann jeder Benutzer mit der echo:can_echo
-Berechtigung es in Slack ausführen.
Weitere Informationen zu Bundles finden Sie im Gort Guide:
In Gort können Benutzer eindeutig Benutzern in einem oder mehreren Chat-Anbietern zugeordnet werden. Gort-Benutzer können Mitglieder einer oder mehrerer Gruppen sein, die wiederum eine beliebige Anzahl von Rollen haben können, die man sich als Sammlungen erteilter Berechtigungen vorstellen kann. Beispielsweise könnte sich der Benutzer dave
in einer Gruppe namens developers
befinden. Dieser Gruppe kann eine Rolle mit dem Namen deployers
zugeordnet sein, die eine Reihe von Berechtigungen enthält, darunter eine mit dem Namen production_deploy
.
Weitere Informationen zu Berechtigungen und Regeln finden Sie im Gort Guide:
Für jeden Befehl kann ein ausgeklügeltes Regelsystem angewendet werden, das definiert, wer ihn verwenden darf. Diese können sehr detailliert sein und sind sogar in der Lage, Berechtigungsentscheidungen basierend auf den Werten bestimmter Flags oder Parameter zu treffen.
Regeln werden auf Bundle-Ebene zugewiesen und können sehr komplex sein. Unten sehen Sie eine Teilmenge eines Pakets namens deploy
.
name : deploy
version : 0.0.1
permissions :
- production_deploy
commands :
deploy :
description : " Deploys to the chosen environment. "
executable : [ "/bin/deploy" ]
rules :
- with arg[0] == "production" must have deploy:production_deploy
Wie Sie sehen können, enthält das obige Beispiel einen Befehl, der auch deploy
genannt wird. Seine einzige Regel besagt, dass jeder Benutzer, der „Production“ als Parameter übergibt, über die Berechtigung production_deploy
(aus dem deploy
Bundle) verfügen muss.
Weitere Informationen zu Berechtigungen und Regeln finden Sie im Gort Guide:
Gort bietet ein ausgeklügeltes Vorlagensystem, mit dem Sie die Darstellung aller an Benutzer gesendeten Informationen steuern können, einschließlich Systemmeldungen sowie Befehlsausgaben und Fehlermeldungen.
Darüber hinaus können Vorlagen auf Anwendungsebene in der Konfiguration oder auf Bundle- oder sogar Befehlsebene in einzelnen Bundle-Konfigurationen definiert werden.
Gort-Vorlagen verwenden die Vorlagensyntax von Go, um die Ausgabe chatunabhängig zu formatieren. Eine sehr einfache Befehlsvorlage könnte beispielsweise wie folgt aussehen:
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
Diese Vorlage gibt die Antwort des Befehls ( .Response.Out
) als monospaced Text aus, der etwa wie folgt aussehen kann:
Eine etwas kompliziertere Vorlage, eine Befehlsfehlervorlage (eigentlich die Standardvorlage), wird unten angezeigt.
{{ header | color "#FF0000" | title .Response.Title }}
{{ text }}The pipeline failed planning the invocation:{{ endtext }}
{{ text | monospace true }}{{ .Request.Bundle.Name }}:{{ .Request.Command.Name }} {{ .Request.Parameters }}{{ endtext }}
{{ text }}The specific error was:{{ endtext }}
{{ text | monospace true }}{{ .Response.Out }}{{ endtext }}
Dieser enthält eine Kopfzeile mit einer Farbe und einem Titel sowie abwechselnd monospaced und Standardtext. In diesem Fall wird ein Befehlsfehler wie der folgende formatiert:
Ihnen werden einige Verweise auf .Response
auffallen: Dabei handelt es sich um Verweise auf den Antwortumschlag , eine Datenstruktur, auf die von jeder Vorlage aus zugegriffen werden kann und die alle Daten und Metadaten rund um eine Befehlsanforderung, -ausführung und -antwort verfügbar macht.
Weitere Informationen zur Audit-Protokollierung finden Sie im Gort-Handbuch:
Gort unterstützt sowohl Slack als auch Discord als erstklassige Chat-Anbieter.
Jeder unterstützte Chat-Anbieter verfügt über einen eigenen Abschnitt in der Konfiguration. Beachten Sie, dass es sich dabei jeweils um eine Liste handelt. Sie können also nicht nur mit Slack und Discord über denselben Gort-Controller interagieren, sondern auch mit mehreren Instanzen von beiden, wenn Sie möchten!
Nachdem Sie einen Bot-Benutzer gemäß den Anweisungen im Gort-Schnellstart erstellt haben, müssen Administratoren nur noch einen Gort-Benutzer erstellen (falls Sie dies noch nicht getan haben) und diesen Gort-Benutzer wie gezeigt einer Chat-Anbieter-Benutzer-ID zuordnen unten:
$ gort user create mtitmus --email [email protected] --name " Matt Titmus " --password REDACTED
User " mtitmus " created.
$ gort user list
USER NAME FULL NAME EMAIL
admin Gort Administrator gort@localhost
mtitmus Matt Titmus [email protected]
$ gort user map mtitmus Slack U012P123456
User " mtitmus " mapped to " Slack:U012P123456 " .
$ gort user info mtitmus
Name mtitmus
Full Name Matt Titmus
Email [email protected]
Groups < undefined >
ADAPTER ID MAPPING
Slack U012P123456
Von da an sind alle vom zugeordneten Chat-Benutzer eingegebenen Befehle diesem Gort-Benutzer zugeordnet!
Alle Befehlsaktivitäten werden sowohl als Protokollereignisse mit hoher Kardinalität ausgegeben (siehe unten) als auch in einem Prüfprotokoll aufgezeichnet, das in Gorts Datenbank verwaltet wird.
Nehmen wir zum Beispiel einen Benutzer, der den Befehl !bundle list
in Slack ausführt:
Dadurch wird eine Protokollausgabe ähnlich der folgenden generiert:
INFO [49594] Triggering command adapter.name=Gort bundle.default=false bundle.name=gort bundle.version=0.0.1
command.executable="[/bin/gort bundle]" command.name=bundle
command.params=list gort.user.name=admin provider.channel.id=C1238A01234
provider.channel.name=gort-dev [email protected]
provider.user.id=U012P123456 trace.id=476b3089c8ce0d38a2915a3b58fde032
Wie Sie sehen, umfasst diese reichhaltige Veranstaltung:
Beachten Sie, dass in diesem Beispiel zur besseren Lesbarkeit das Format „für Menschen lesbar“ verwendet wird. Im Produktionsmodus generiert Gort JSON-codierte Protokollereignisse.
Weitere Informationen zur Audit-Protokollierung finden Sie im Gort-Handbuch:
Weitere Informationen finden Sie in der Kurzanleitung im Gort Guide.
Die gort
Binärdatei dient auch als Controller-Verwaltungs-CLI.
Der gort
Client verwendet eine YAML-formatierte Konfigurationsdatei, die sich üblicherweise in der profile
in einem .gort
Verzeichnis in Ihrem Home-Verzeichnis befindet. Hier können Sie Verbindungsanmeldeinformationen speichern, damit gort
mit der REST-API des Gort-Controllers interagieren kann.
Eine Beispieldatei .gort/profile
könnte so aussehen:
defaults :
profile : gort
gort :
url : https://gort.mycompany.com:4000
password : " seekrit#password "
user : me
preprod :
url : https://gort.preprod.mycompany.com:4000
password : " anotherseekrit#password "
user : me
Kommentare beginnen mit einem #
-Zeichen; Wenn Ihr Passwort ein #
enthält, setzen Sie das gesamte Passwort in Anführungszeichen, wie oben dargestellt.
Sie können in dieser Datei mehrere „Profile“ mit jeweils unterschiedlichen Namen speichern (hier haben wir gort
und preprod
). Was auch immer als Standard angegeben ist (im Abschnitt defaults
“), wird von gort
verwendet. Sie können jedoch die Option --profile=$PROFILE
an gort
übergeben, um einen anderen Satz von Anmeldeinformationen zu verwenden.
Sie können dieser Datei zwar manuell Profile hinzufügen, Sie können aber auch den Befehl gort profile create
verwenden, um zu helfen.
Die ausführbare Datei gort
enthält eine Reihe von Befehlen und Unterbefehlen. Für alle ist Hilfe verfügbar, indem Sie die Option --help
übergeben. Beginnen Sie mit gort --help
und gehen Sie von dort aus weiter.
Gort befindet sich in einem Zustand aktiver, intensiver Entwicklung. Das Datum, an dem verschiedene Meilensteine erreicht wurden, ist unten aufgeführt. Die Anzahl und der Schwerpunkt gegenwärtiger und zukünftiger Meilensteine können sich ändern.