Gopherbot foi projetado para automação e orquestração flexíveis de tarefas de infraestrutura e desenvolvimento para equipes do Slack 1 . Ele oferece suporte a scripts e bibliotecas em Bash 2 , Python, Ruby e Go 3 , com uma arquitetura dinâmica baseada em pipeline que oferece suporte a fluxos de trabalho complexos em vários idiomas. O mecanismo principal inicializa e atualiza robôs de equipe individuais a partir de um repositório git contendo configuração (principalmente YAML), scripts e bibliotecas usadas para automação, com uma API de robô simples para cada linguagem que simplifica drasticamente as interações baseadas em chat, rastreamento de estado e simultaneidade.
Slogans em consideração:
O Gopherbot é executado como um processo Linux em um servidor/VM ou contêiner em sua infraestrutura. Na inicialização, ele examina algumas variáveis de ambiente necessárias para recuperar o repositório git e as credenciais criptografadas do seu robô e, em seguida, conecta-se ao bate-papo da equipe. A partir daí, ele pode responder a comandos semelhantes a CLI que correspondem a expressões regulares cujos grupos de captura são passados como argumentos de linha de comando para scripts escritos em Bash, Ruby, Python ou Go 4 . Esses plug-ins podem executar inúmeras funções para provisionar recursos, executar relatórios, implantar software ou interagir com CI/CD – praticamente qualquer funcionalidade que um engenheiro de DevOps possa querer fornecer no bate-papo da equipe. A maioria dos robôs também executa qualquer número de "trabalhos" de automação, agendados com o recurso cron integrado ou acionados por mensagens externas específicas postadas por outras tarefas automatizadas externas, como uma notificação de "construção concluída" do CI/CD ou uma mensagem de commit do Github. Você pode encontrar muito mais informações na introdução do manual online.
A documentação mais recente sempre pode ser encontrada no manual online hospedado no GitHub; a fonte da documentação está em um repositório separado. A documentação gerada automaticamente a partir das fontes Go pode ser encontrada em pkg.go.dev.
O manual ainda está muito incompleto; entretanto, às vezes a melhor documentação é um código de exemplo. Para isso, o robô mais poderoso e completo que tenho é o Sr. Data (agora aposentado) - o robô que administrava meu cluster Kubernetes doméstico quando eu ainda tinha tempo para essas coisas. Clu é o robô de desenvolvimento usado para desenvolvimento e redação de documentação. Embora Clu não faça nenhum trabalho útil, ele tem exemplos da maioria das facetas da funcionalidade do Gopherbot . Floyd (um robô utilitário que compartilhei com minha esposa) é a instância de robô mais antiga e de maior duração, embora tenha se aposentado depois que a AWS começou a cobrar por seu endereço IP.
A versão 2 está estável para mim há mais de um ano e finalmente foi lançada. Aceitei que um manual totalmente atualizado sofrerá um atraso significativo, mas atualmente é aí que a maior parte do trabalho está sendo feito. A versão 3 é esperada para o primeiro trimestre de 2025, com os recursos principais sendo suporte dinâmico à extensão Go (já disponível na v2.15.0) e tendo todos os recursos principais migrados para extensões Go dinâmicas para reduzir dependências de inicialização.
Se você tiver o Docker disponível, poderá chutar os pneus do robô padrão que executa o conector do 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 uma visualização mais completa do Gopherbot no IDE , consulte a seção de visualização no manual online.
Você pode baixar a versão mais recente na página de lançamento. Compilações de contêineres atualizadas podem ser encontradas no GitHub Container Registry.
Os pipelines Gopherbot CI/CD criam duas variantes de contêiner:
ghcr.io/lnxjedi/gopherbot
gopherbot
é um contêiner gopherbot mínimo para executar um robô em contêiner de produçãoghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
usa OpenVSCode Server como ponto de entrada e destina-se ao uso na configuração e desenvolvimento de extensões para seus robôs 5 Construir a partir do código-fonte é tão simples quanto make dist
com o Makefile
, desde que o sistema de compilação tenha todos os requisitos.
Requisitos:
Passos:
git checkout v2.6.2.1
make dist
na raiz do repositório para criar um arquivo instalável ou apenas make
para construir os bináriosEsta transcrição de exemplo está um pouco desatualizada e não mostra a nova funcionalidade de trabalho introduzida na versão 2 - mas o Gopherbot ainda sabe contar piadas.
As portas Windows e Darwin (MacOS) foram removidas. A melhor solução para essas plataformas é aproveitar o excelente suporte a contêineres Linux para executar seu robô em um contêiner, talvez com Docker Desktop. WSL também é uma boa solução 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
Relações públicas são bem-vindas. Para desenvolvimento, teste e colaboração, sinta-se à vontade para me enviar um e-mail solicitando um convite para a equipe LinuxJedi Slack.
Gopherbot possui uma interface modular para escrever outros conectores de protocolo em Go; atualmente apenas o Slack e o conector Terminal são suportados ↩
A biblioteca bash atual não suporta memórias de longo prazo, embora suporte limitado esteja planejado para v3 ↩
Desde a versão 2.15, o Gopherbot suporta extensões Go carregadas dinamicamente via Yaegi, mas apenas stdlib e a API Gopherbot são suportadas ↩
Go é a exceção a esse padrão; em vez disso, as extensões Go definem funções de manipulador que recebem um objeto "robô" e argumentos de string. ↩
Observe que o contêiner de desenvolvimento sempre contém o código mais recente em /opt/gopherbot
- você pode querer, por exemplo, cd /opt/gopherbot; git checkout v2.6.2.1; make
↩