Gopherbot está diseñado para la automatización y orquestación flexible de tareas de infraestructura y desarrollo para equipos de Slack 1 . Admite secuencias de comandos y bibliotecas en Bash 2 , Python, Ruby y Go 3 , con una arquitectura dinámica basada en canalizaciones que admite flujos de trabajo complejos en varios idiomas. El motor central arranca y actualiza los robots de equipo individuales desde un repositorio de git que contiene configuración (principalmente YAML), scripts y bibliotecas utilizadas para la automatización, con una API de robot simple para cada idioma que simplifica drásticamente las interacciones basadas en chat, el seguimiento del estado y la concurrencia.
Lemas bajo consideración:
Gopherbot se ejecuta como un proceso de Linux en un servidor/VM o contenedor en su infraestructura. Al iniciarse, examina algunas variables de entorno necesarias para recuperar el repositorio git de su robot y las credenciales cifradas, luego se conecta al chat de su equipo. Desde allí puede responder a comandos tipo CLI que coincidan con expresiones regulares cuyos grupos de captura se pasan como argumentos de línea de comandos a scripts escritos en Bash, Ruby, Python o Go 4 . Estos complementos pueden realizar cualquier cantidad de funciones para aprovisionar recursos, ejecutar informes, implementar software o interactuar con CI/CD: prácticamente cualquier funcionalidad que un ingeniero de DevOps quiera proporcionar en el chat del equipo. La mayoría de los robots también realizan cualquier cantidad de "trabajos" de automatización, ya sea programados con la función cron incorporada o activados por mensajes externos específicos publicados desde otras tareas automatizadas externas, como una notificación de "compilación completa" de CI/CD o un mensaje de confirmación de GitHub. Puede encontrar mucha más información en la introducción del manual en línea.
La documentación más reciente siempre se puede encontrar en el manual en línea alojado en GitHub; la fuente de la documentación se encuentra en un repositorio separado. La documentación generada automáticamente a partir de las fuentes de Go se puede encontrar en pkg.go.dev.
El manual todavía está muy incompleto; sin embargo, a veces la mejor documentación es el código de ejemplo. Con ese fin, el robot más poderoso y completo que tengo es Mr. Data (ahora retirado), el robot que manejaba el clúster de Kubernetes de mi casa cuando todavía tenía tiempo para ese tipo de cosas. Clu es el robot de desarrollo utilizado para desarrollar y escribir documentación. Aunque Clu no hace ningún trabajo útil, tiene ejemplos de la mayoría de las facetas de la funcionalidad de Gopherbot . Floyd (un robot utilitario que compartí con mi esposa) es la instancia de robot más antigua y de mayor duración, aunque se retiró después de que AWS comenzó a cobrar por su dirección IP.
La versión 2 ha sido estable para mí durante más de un año y finalmente se lanzó. He aceptado que un manual completamente actualizado tardará significativamente, pero es ahí donde actualmente se está haciendo la mayor parte del trabajo. Se espera la versión 3 para el primer trimestre de 2025, cuyas características principales son la compatibilidad con la extensión dinámica de Go (ya disponible en v2.15.0) y la migración de todas las características principales a extensiones dinámicas de Go para reducir las dependencias de arranque.
Si tiene Docker disponible, puede patear los neumáticos del robot predeterminado que ejecuta el conector del 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
...
Para obtener una vista previa más completa de Gopherbot en el IDE , consulte la sección de vista previa en el manual en línea.
Puede descargar la última versión desde la página de lanzamiento. Las compilaciones de contenedores actualizadas se pueden encontrar en GitHub Container Registry.
Las canalizaciones de CI/CD de Gopherbot crean dos variantes de contenedor:
ghcr.io/lnxjedi/gopherbot
gopherbot
es un contenedor de gopherbot bastante mínimo para ejecutar un robot de producción en contenedoresghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
utiliza OpenVSCode Server como punto de entrada y está diseñado para configurar y desarrollar extensiones para sus robots 5 Construir desde el código fuente es tan sencillo como make dist
con Makefile
, siempre y cuando el sistema de compilación tenga todos los requisitos.
Requisitos:
Pasos:
git checkout v2.6.2.1
make dist
en la raíz del repositorio para crear un archivo instalable, o simplemente make
para compilar los binariosEsta transcripción de ejemplo está un poco desactualizada y no muestra la nueva funcionalidad laboral introducida en la versión 2, pero Gopherbot aún sabe cómo contar chistes.
Se han eliminado los puertos de Windows y Darwin (MacOS). La mejor solución para estas plataformas es aprovechar la excelente compatibilidad con contenedores de Linux para ejecutar su robot en un contenedor, tal vez con Docker Desktop. WSL también es una buena solución para 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
Bienvenidas las relaciones públicas. Para desarrollo, pruebas y colaboración, no dudes en enviarme un correo electrónico para recibir una invitación al equipo de LinuxJedi Slack.
Gopherbot tiene una interfaz modular para escribir otros conectores de protocolo en Go; Actualmente solo se admiten Slack y el conector Terminal ↩
La biblioteca bash actual no admite memorias a largo plazo, aunque se planea soporte limitado para v3 ↩
Desde la versión 2.15, Gopherbot admite extensiones Go cargadas dinámicamente a través de Yaegi, pero solo se admiten stdlib y la API de Gopherbot ↩
Go es la excepción a este patrón; en cambio, las extensiones Go definen funciones de controlador a las que se les pasa un objeto "robot" y argumentos de cadena. ↩
Tenga en cuenta que el contenedor de desarrollo siempre contiene el código más reciente en /opt/gopherbot
; es posible que desee, por ejemplo, cd /opt/gopherbot; git checkout v2.6.2.1; make
↩