Gopherbot ได้รับการออกแบบมาเพื่อระบบอัตโนมัติที่ยืดหยุ่นและการจัดการโครงสร้างพื้นฐานและงานการพัฒนาสำหรับทีม Slack 1 รองรับการเขียนสคริปต์และไลบรารีใน Bash 2 , Python, Ruby และ Go 3 ด้วยสถาปัตยกรรมไปป์ไลน์แบบไดนามิกที่รองรับเวิร์กโฟลว์หลายภาษาที่ซับซ้อน กลไกหลักจะบูตสแตรปและอัปเดตโรบ็อตในทีมแต่ละตัวจากพื้นที่เก็บข้อมูล git ที่มีการกำหนดค่า (ส่วนใหญ่เป็น YAML) สคริปต์และไลบรารีที่ใช้สำหรับระบบอัตโนมัติ พร้อมด้วย robot API อย่างง่ายสำหรับแต่ละภาษาที่ลดความซับซ้อนอย่างมากในการโต้ตอบด้วยการแชท การติดตามสถานะ และการทำงานพร้อมกัน
คำขวัญที่อยู่ระหว่างการพิจารณา:
Gopherbot ทำงานเป็นกระบวนการ Linux บนเซิร์ฟเวอร์/VM หรือคอนเทนเนอร์ในโครงสร้างพื้นฐานของคุณ เมื่อเริ่มต้นระบบ จะตรวจสอบตัวแปรสภาพแวดล้อมบางอย่างที่จำเป็นในการเรียกค้นพื้นที่เก็บข้อมูล Git ของหุ่นยนต์และข้อมูลประจำตัวที่เข้ารหัส จากนั้นเชื่อมต่อกับแชททีมของคุณ จากนั้นสามารถตอบสนองคำสั่งที่คล้ายกับ CLI ที่ตรงกับนิพจน์ทั่วไปซึ่งมีกลุ่มการจับภาพถูกส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์ที่เขียนด้วย Bash, Ruby, Python หรือ Go 4 ปลั๊กอินเหล่านี้สามารถทำหน้าที่ต่างๆ มากมายเพื่อจัดเตรียมทรัพยากร เรียกใช้รายงาน ปรับใช้ซอฟต์แวร์ หรือโต้ตอบกับ CI/CD - แทบทุกฟังก์ชันที่วิศวกร DevOps อาจต้องการให้ในการแชทเป็นทีม หุ่นยนต์ส่วนใหญ่ยังดำเนินการ "งาน" อัตโนมัติจำนวนเท่าใดก็ได้ ทั้งที่กำหนดเวลาไว้ด้วยเครื่องมืออำนวยความสะดวก cron ในตัวหรือถูกกระตุ้นโดยข้อความภายนอกเฉพาะที่โพสต์จากงานอัตโนมัติภายนอกอื่น ๆ เช่นการแจ้งเตือน "สร้างเสร็จสมบูรณ์" จาก CI/CD หรือส่งข้อความจาก GitHub คุณสามารถค้นหาข้อมูลเพิ่มเติมได้มากมายในการแนะนำคู่มือออนไลน์
คุณสามารถดูเอกสารล่าสุดได้ที่คู่มือออนไลน์ที่โฮสต์โดย GitHub แหล่งเอกสารอยู่ในพื้นที่เก็บข้อมูลแยกต่างหาก สามารถดูเอกสารที่สร้างโดยอัตโนมัติจากแหล่งที่มา Go ได้ที่ pkg.go.dev
คู่มือยังไม่สมบูรณ์มาก อย่างไรก็ตาม บางครั้งเอกสารประกอบที่ดีที่สุดก็คือโค้ดตัวอย่าง ด้วยเหตุนี้ หุ่นยนต์ที่ทรงพลังและสมบูรณ์แบบที่สุดที่ฉันมีคือ Mr. Data (ตอนนี้เกษียณแล้ว) ซึ่งเป็นหุ่นยนต์ที่ดูแลคลัสเตอร์ Kubernetes ที่บ้านของฉัน ตอนที่ฉันยังมีเวลาทำสิ่งเหล่านั้น Clu คือหุ่นยนต์พัฒนาที่ใช้สำหรับการพัฒนาและเขียนเอกสาร แม้ว่า Clu จะไม่ทำงานที่มีประโยชน์ แต่เขาก็มีตัวอย่างฟังก์ชันการทำงานของ Gopherbot ส่วนใหญ่ Floyd (หุ่นยนต์อเนกประสงค์ที่ฉันแชร์กับภรรยา) เป็นอินสแตนซ์หุ่นยนต์ที่เก่าแก่ที่สุดและใช้งานยาวนานที่สุด แม้ว่าเขาจะเลิกใช้งานไปแล้วหลังจากที่ AWS เริ่มเรียกเก็บเงินสำหรับที่อยู่ IP ของเขาก็ตาม
เวอร์ชัน 2 เสถียรสำหรับฉันมานานกว่าหนึ่งปีแล้ว และในที่สุดก็เปิดตัวแล้ว ฉันยอมรับว่าคู่มือที่เป็นปัจจุบันอย่างสมบูรณ์จะล่าช้าอย่างมาก แต่นั่นคือส่วนที่งานส่วนใหญ่กำลังทำอยู่ในปัจจุบัน คาดว่าจะเป็นเวอร์ชัน 3 ในไตรมาสที่ 1 ปี 2025 โดยฟีเจอร์หลักคือการรองรับส่วนขยาย Go แบบไดนามิก (พร้อมใช้งานแล้วในเวอร์ชัน 2.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
...
หากต้องการดูตัวอย่าง Gopherbot ใน IDE อย่างละเอียดยิ่งขึ้น โปรดดูส่วนแสดงตัวอย่างในคู่มือออนไลน์
คุณสามารถดาวน์โหลดเวอร์ชันล่าสุดได้จากหน้าเผยแพร่ บิลด์คอนเทนเนอร์ที่ทันสมัยสามารถพบได้ใน GitHub Container Registry
ไปป์ไลน์ Gopherbot CI/CD สร้างคอนเทนเนอร์ 2 แบบ:
ghcr.io/lnxjedi/gopherbot
gopherbot
เป็นคอนเทนเนอร์ gopherbot ที่ค่อนข้างเล็กสำหรับการรันหุ่นยนต์ในคอนเทนเนอร์การผลิตghcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
ใช้ OpenVSCode Server สำหรับจุดเข้าใช้งาน และมีวัตถุประสงค์เพื่อใช้ในการตั้งค่าและพัฒนาส่วนขยายสำหรับโรบ็อตของคุณ 5 การสร้างจากแหล่งที่มานั้นตรงไปตรงมาเหมือนกับ make dist
ด้วย Makefile
ตราบใดที่ระบบการ build มีข้อกำหนดทั้งหมด
ความต้องการ:
ขั้นตอน:
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 รองรับส่วนขยาย Go ที่โหลดแบบไดนามิกผ่าน Yaegi แต่รองรับเฉพาะ stdlib และ Gopherbot API ↩
Go เป็นข้อยกเว้นสำหรับรูปแบบนี้ ส่วนขยาย Go จะกำหนดฟังก์ชันตัวจัดการที่ส่งผ่านอ็อบเจ็กต์ "robot" และอาร์กิวเมนต์สตริงแทน
โปรดทราบว่าคอนเทนเนอร์การพัฒนาจะมีโค้ดล่าสุดใน /opt/gopherbot
เสมอ - คุณอาจต้องการเช่น cd /opt/gopherbot; git checkout v2.6.2.1; make
↩