Gopherbot은 Slack 1 팀을 위한 인프라 및 개발 작업의 유연한 자동화 및 조정을 위해 설계되었습니다. 복잡한 다중 언어 워크플로우를 지원하는 동적 파이프라인 기반 아키텍처를 통해 Bash 2 , Python, Ruby 및 Go 3 의 스크립팅 및 라이브러리를 지원합니다. 핵심 엔진은 채팅 기반 상호 작용, 상태 추적 및 동시성을 대폭 단순화하는 각 언어에 대한 간단한 로봇 API를 사용하여 구성(주로 YAML), 자동화에 사용되는 스크립트 및 라이브러리가 포함된 git 저장소에서 개별 팀 로봇을 부트스트랩하고 업데이트합니다.
고려 중인 슬로건:
Gopherbot은 인프라의 서버/VM 또는 컨테이너에서 Linux 프로세스로 실행됩니다. 시작 시 로봇의 Git 저장소와 암호화된 자격 증명을 검색하는 데 필요한 몇 가지 환경 변수를 검사한 다음 팀 채팅에 연결합니다. 여기에서 캡처 그룹이 Bash, Ruby, Python 또는 Go 4 로 작성된 스크립트에 명령줄 인수로 전달되는 정규식과 일치하는 CLI와 유사한 명령에 응답할 수 있습니다. 이러한 플러그인은 리소스 프로비저닝, 보고서 실행, 소프트웨어 배포 또는 CI/CD와의 상호 작용 등 다양한 기능을 수행할 수 있습니다. 이는 DevOps 엔지니어가 팀 채팅에서 제공하려는 거의 모든 기능에 해당합니다. 또한 대부분의 로봇은 내장된 cron 기능으로 예약되거나 CI/CD의 "빌드 완료" 알림 또는 GitHub. 온라인 매뉴얼 소개에서 더 많은 정보를 확인하실 수 있습니다.
최신 문서는 항상 GitHub에서 호스팅되는 온라인 매뉴얼에서 찾을 수 있습니다. 문서 소스는 별도의 저장소에 있습니다. Go 소스에서 자동으로 생성된 문서는 pkg.go.dev에서 찾을 수 있습니다.
매뉴얼은 아직 매우 불완전합니다. 그러나 때때로 가장 좋은 문서는 예제 코드입니다. 이를 위해 제가 가지고 있는 가장 강력하고 완전한 로봇은 Mr. Data(현재는 은퇴함)입니다. 이 로봇은 제가 아직 그런 일을 할 시간이 있었을 때 제 집 Kubernetes 클러스터를 실행했습니다. Clu는 개발 및 문서 작성에 사용되는 개발 로봇입니다. Clu는 유용한 작업을 수행하지 않지만 Gopherbot 기능의 대부분 측면에 대한 예를 보유하고 있습니다. Floyd(제가 아내와 공유한 유틸리티 로봇)는 AWS가 IP 주소에 대한 비용을 청구하기 시작한 후 은퇴했지만 가장 오래되고 가장 오래 실행되는 로봇 인스턴스입니다.
버전 2가 1년 넘게 안정적으로 사용되다가 드디어 출시되었습니다. 나는 완전한 최신 매뉴얼이 상당히 지연될 것이라는 점을 인정했지만 현재 가장 많은 작업이 수행되고 있는 부분이 바로 여기에 있습니다. 버전 3은 2025년 1분기에 출시될 예정입니다. 주요 기능은 동적 Go 확장 지원(v2.15.0에서 이미 사용 가능)이며 모든 핵심 기능을 동적 Go 확장으로 마이그레이션하여 부트스트래핑 종속성을 줄입니다.
Docker를 사용할 수 있는 경우 터미널 커넥터를 실행하는 기본 로봇에서 타이어를 찰 수 있습니다.
$ 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
...
IDE 에서 Gopherbot을 보다 철저하게 미리 보려면 온라인 설명서의 미리 보기 섹션을 참조하세요.
릴리스 페이지에서 최신 릴리스 빌드를 다운로드할 수 있습니다. 최신 컨테이너 빌드는 GitHub Container Registry에서 찾을 수 있습니다.
Gopherbot CI/CD 파이프라인은 두 가지 컨테이너 변형을 생성합니다.
ghcr.io/lnxjedi/gopherbot
gopherbot
은 프로덕션 컨테이너형 로봇을 실행하기 위한 매우 최소한의 gopherbot 컨테이너입니다.ghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
진입점으로 OpenVSCode Server를 사용하며 로봇 5 용 확장을 설정하고 개발하는 데 사용됩니다. 소스에서 빌드하는 것은 빌드 시스템에 모든 요구 사항이 있는 한 Makefile
사용한 make dist
만큼 간단합니다.
요구사항:
단계:
git checkout v2.6.2.1
make dist
거나 바이너리를 빌드하기 위해 make
만 하면 됩니다.이 예제 기록은 약간 오래되었으며 버전 2에 도입된 새로운 작업 기능을 보여주지 않습니다. 하지만 Gopherbot은 여전히 농담을 하는 방법을 알고 있습니다.
Windows 및 Darwin(MacOS) 포트가 모두 제거되었습니다. 이러한 플랫폼에 가장 적합한 솔루션은 탁월한 Linux 컨테이너 지원을 활용하여 Docker Desktop을 사용하여 컨테이너에서 로봇을 실행하는 것입니다. WSL은 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
홍보 환영합니다. 개발, 테스트 및 협업을 위해 LinuxJedi Slack 팀 초대 이메일을 보내 주시기 바랍니다.
Gopherbot에는 Go에서 다른 프로토콜 커넥터를 작성하기 위한 모듈식 인터페이스가 있습니다. 현재는 Slack과 Terminal 커넥터만 지원됩니다 ↩
현재 bash 라이브러리는 장기 기억을 지원하지 않지만 v3에서는 제한적으로 지원될 예정입니다 ↩
버전 2.15부터 Gopherbot은 Yaegi를 통해 동적으로 로드된 Go 확장을 지원하지만 stdlib 및 Gopherbot API만 지원됩니다 ↩
Go는 이 패턴의 예외입니다. 대신 Go 확장은 "로봇" 객체와 문자열 인수가 전달되는 핸들러 함수를 정의합니다. ↩
개발 컨테이너에는 항상 /opt/gopherbot
에 최신 코드가 포함되어 있습니다. 예를 들어 cd /opt/gopherbot; git checkout v2.6.2.1; make
↩을 cd /opt/gopherbot; git checkout v2.6.2.1; make