Gopherbot est conçu pour l'automatisation et l'orchestration flexibles des tâches d'infrastructure et de développement pour les équipes Slack 1 . Il prend en charge les scripts et les bibliothèques dans Bash 2 , Python, Ruby et Go 3 , avec une architecture dynamique basée sur un pipeline prenant en charge des flux de travail multilingues complexes. Le moteur principal démarre et met à jour les robots d'équipe individuels à partir d'un référentiel Git contenant la configuration (principalement YAML), des scripts et des bibliothèques utilisés pour l'automatisation, avec une API de robot simple pour chaque langage qui simplifie considérablement les interactions basées sur le chat, le suivi de l'état et la concurrence.
Slogans à l'étude :
Gopherbot s'exécute comme un processus Linux sur un serveur/VM ou un conteneur de votre infrastructure. Au démarrage, il examine quelques variables d'environnement nécessaires pour récupérer le référentiel git et les informations d'identification cryptées de votre robot, puis se connecte au chat de votre équipe. À partir de là, il peut répondre aux commandes de type CLI correspondant aux expressions régulières dont les groupes de capture sont transmis comme arguments de ligne de commande aux scripts écrits en Bash, Ruby, Python ou Go 4 . Ces plugins peuvent exécuter un certain nombre de fonctions pour provisionner des ressources, exécuter des rapports, déployer des logiciels ou interagir avec CI/CD – à peu près toutes les fonctionnalités qu'un ingénieur DevOps pourrait vouloir fournir dans le chat d'équipe. La plupart des robots effectuent également un certain nombre de « tâches » d'automatisation, soit planifiées avec la fonction cron intégrée, soit déclenchées par des messages externes spécifiques publiés à partir d'autres tâches automatisées externes, telles qu'une notification « construction terminée » de CI/CD ou un message de validation de GitHub. Vous pouvez trouver beaucoup plus d'informations dans l'introduction du manuel en ligne.
La documentation la plus récente peut toujours être trouvée dans le manuel en ligne hébergé par GitHub ; la source de la documentation se trouve dans un référentiel distinct. La documentation générée automatiquement à partir des sources Go peut être trouvée sur pkg.go.dev.
Le manuel est encore très incomplet ; cependant, la meilleure documentation est parfois un exemple de code. À cette fin, le robot le plus puissant et le plus complet dont je dispose est M. Data (aujourd'hui à la retraite) - le robot qui gérait mon cluster Kubernetes domestique lorsque j'avais encore le temps pour de telles choses. Clu est le robot de développement utilisé pour le développement et la rédaction de la documentation. Bien que Clu ne fasse aucun travail utile, il propose des exemples de la plupart des facettes des fonctionnalités de Gopherbot . Floyd (un robot utilitaire que j'ai partagé avec ma femme) est l'instance de robot la plus ancienne et la plus ancienne, bien qu'il ait pris sa retraite après qu'AWS ait commencé à facturer son adresse IP.
La version 2 est stable pour moi depuis plus d'un an et est enfin sortie. J'ai accepté qu'un manuel entièrement à jour prendra un retard considérable, mais c'est actuellement là que le plus de travail est effectué. La version 3 est attendue pour le premier trimestre 2025, les principales fonctionnalités étant la prise en charge de l'extension Go dynamique (déjà disponible dans la v2.15.0) et la migration de toutes les fonctionnalités de base vers des extensions Go dynamiques pour réduire les dépendances d'amorçage.
Si Docker est disponible, vous pouvez lancer les pneus du robot par défaut exécutant le connecteur de terminal :
$ 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
...
Pour un aperçu plus complet de Gopherbot dans l' EDI , consultez la section aperçu dans le manuel en ligne.
Vous pouvez télécharger la dernière version à partir de la page des versions. Les versions de conteneurs à jour peuvent être trouvées dans le registre de conteneurs GitHub.
Les pipelines Gopherbot CI/CD créent deux variantes de conteneur :
ghcr.io/lnxjedi/gopherbot
gopherbot
est un conteneur gopherbot assez minimal pour exécuter un robot conteneurisé de productionghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
utilise OpenVSCode Server comme point d'entrée et est destiné à être utilisé dans la configuration et le développement d'extensions pour vos robots 5 Construire à partir des sources est aussi simple que make dist
avec le Makefile
, tant que le système de construction répond à toutes les exigences.
Exigences:
Mesures:
git checkout v2.6.2.1
make dist
à la racine du référentiel pour créer une archive installable, ou simplement make
pour construire les binairesCet exemple de transcription est un peu obsolète et ne présente pas la nouvelle fonctionnalité de travail introduite dans la version 2 – mais Gopherbot sait toujours comment raconter des blagues.
Les ports Windows et Darwin (MacOS) ont tous deux été supprimés. La meilleure solution pour ces plates-formes est de profiter de l'excellente prise en charge des conteneurs Linux pour exécuter votre robot dans un conteneur, peut-être avec Docker Desktop. WSL est également une bonne solution pour 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
Les relations publiques sont les bienvenues. Pour le développement, les tests et la collaboration, n'hésitez pas à m'envoyer un e-mail pour une invitation à l'équipe LinuxJedi Slack.
Gopherbot dispose d'une interface modulaire pour écrire d'autres connecteurs de protocole dans Go ; actuellement, seuls Slack et le connecteur Terminal sont pris en charge ↩
La bibliothèque bash actuelle ne prend pas en charge les mémoires à long terme, bien qu'une prise en charge limitée soit prévue pour la v3 ↩
Depuis la version 2.15, Gopherbot prend en charge les extensions Go chargées dynamiquement via Yaegi, mais seuls stdlib et l'API Gopherbot sont pris en charge ↩
Go est l’exception à ce modèle ; à la place, les extensions Go définissent des fonctions de gestionnaire auxquelles sont transmis un objet "robot" et des arguments de chaîne. ↩
Notez que le conteneur de développement contient toujours le code le plus récent dans /opt/gopherbot
- vous souhaiterez peut-être par exemple cd /opt/gopherbot; git checkout v2.6.2.1; make
↩