Gopherbot dirancang untuk otomatisasi dan orkestrasi infrastruktur dan tugas pengembangan yang fleksibel untuk tim Slack 1 . Ini mendukung skrip dan perpustakaan di Bash 2 , Python, Ruby, dan Go 3 , dengan arsitektur berbasis pipa dinamis yang mendukung alur kerja multi-bahasa yang kompleks. Mesin inti melakukan bootstrap dan memperbarui robot tim individu dari repositori git yang berisi konfigurasi (kebanyakan YAML), skrip dan pustaka yang digunakan untuk otomatisasi, dengan API robot sederhana untuk setiap bahasa yang secara drastis menyederhanakan interaksi berbasis obrolan, pelacakan status, dan konkurensi.
Slogan yang sedang dipertimbangkan:
Gopherbot berjalan sebagai proses Linux di server/VM atau container di infrastruktur Anda. Saat permulaan, robot ini memeriksa beberapa variabel lingkungan yang diperlukan untuk mengambil repositori git robot Anda dan kredensial terenkripsi, lalu menghubungkan ke obrolan tim Anda. Dari sana, ia dapat merespons perintah mirip CLI yang cocok dengan ekspresi reguler yang grup tangkapannya diteruskan sebagai argumen baris perintah ke skrip yang ditulis dalam Bash, Ruby, Python, atau Go 4 . Plugin ini dapat melakukan sejumlah fungsi untuk menyediakan sumber daya, menjalankan laporan, menyebarkan perangkat lunak, atau berinteraksi dengan CI/CD - hampir semua fungsi yang mungkin ingin disediakan oleh teknisi DevOps dalam obrolan tim. Kebanyakan robot juga melakukan sejumlah "pekerjaan" otomasi, baik yang dijadwalkan dengan fasilitas cron bawaan atau dipicu oleh pesan eksternal tertentu yang diposting dari tugas otomatis eksternal lainnya, seperti notifikasi "build complete" dari CI/CD atau pesan commit dari GitHub. Anda dapat menemukan lebih banyak informasi di bagian pendahuluan manual online.
Dokumentasi terbaru selalu dapat ditemukan di manual online yang dihosting GitHub; sumber dokumentasi ada di repositori terpisah. Dokumentasi yang dihasilkan secara otomatis dari sumber Go dapat ditemukan di pkg.go.dev.
Panduan ini masih sangat belum lengkap; namun, terkadang dokumentasi terbaik adalah kode contoh. Untuk itu, robot paling kuat dan lengkap yang saya miliki adalah Mr. Data (sekarang sudah pensiun) - robot yang menjalankan cluster Kubernetes di rumah saya ketika saya masih punya waktu untuk hal-hal seperti itu. Clu adalah robot pengembangan yang digunakan untuk pengembangan dan penulisan dokumentasi. Meskipun Clu tidak melakukan pekerjaan yang berguna, dia memiliki contoh sebagian besar aspek fungsi Gopherbot . Floyd (robot utilitas yang saya bagikan dengan istri saya) adalah robot tertua dan paling lama berjalan, meskipun ia pensiun setelah AWS mulai membebankan biaya untuk alamat IP-nya.
Versi 2 telah stabil bagi saya selama lebih dari setahun, dan akhirnya dirilis. Saya telah menerima bahwa manual yang sepenuhnya mutakhir akan sangat tertinggal, namun saat ini sebagian besar pekerjaan sedang dilakukan. Versi 3 diharapkan tersedia pada Q1 2025, dengan fitur utamanya adalah dukungan ekstensi Go dinamis (sudah tersedia di v2.15.0) dan semua fitur inti dimigrasikan ke ekstensi Go dinamis untuk mengurangi ketergantungan bootstrapping.
Jika Anda memiliki Docker, Anda dapat menghentikan robot default yang menjalankan konektor 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
...
Untuk pratinjau Gopherbot di IDE yang lebih menyeluruh, lihat bagian pratinjau di manual online.
Anda dapat mengunduh versi rilis terbaru dari halaman rilis. Pembuatan kontainer terkini dapat ditemukan di GitHub Container Registry.
Pipeline Gopherbot CI/CD membuat dua varian kontainer:
ghcr.io/lnxjedi/gopherbot
gopherbot
adalah wadah gopherbot yang cukup minimal untuk menjalankan robot dalam wadah produksighcr.io/lnxjedi/gopherbot-dev
gopherbot-dev
menggunakan OpenVSCode Server sebagai titik masuk, dan dimaksudkan untuk digunakan dalam menyiapkan dan mengembangkan ekstensi untuk robot Anda 5 Membangun dari sumber sama mudahnya dengan make dist
dengan Makefile
, selama sistem pembangunan memiliki semua persyaratan.
Persyaratan:
Tangga:
git checkout v2.6.2.1
make dist
di root repositori untuk membuat arsip yang dapat diinstal, atau cukup make
untuk membuat binariContoh transkrip ini agak ketinggalan jaman, dan tidak menampilkan fungsi pekerjaan baru yang diperkenalkan di versi 2 - namun Gopherbot masih tahu cara menceritakan lelucon.
Port Windows dan Darwin (MacOS) keduanya telah dihapus. Solusi terbaik untuk platform ini adalah memanfaatkan dukungan container Linux yang sangat baik untuk menjalankan robot Anda dalam sebuah container, mungkin dengan Docker Desktop. WSL juga merupakan solusi yang baik untuk 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
Selamat datang PR. Untuk pengembangan, pengujian, dan kolaborasi, silakan kirimkan email kepada saya untuk undangan ke tim LinuxJedi Slack.
Gopherbot memiliki antarmuka modular untuk menulis konektor protokol lain di Go; saat ini hanya Slack dan konektor Terminal yang didukung ↩
Pustaka bash saat ini tidak mendukung memori jangka panjang, meskipun dukungan terbatas direncanakan untuk v3 ↩
Sejak versi 2.15, Gopherbot mendukung ekstensi Go yang dimuat secara dinamis melalui Yaegi, tetapi hanya stdlib dan Gopherbot API yang didukung ↩
Go adalah pengecualian untuk pola ini; sebagai gantinya, ekstensi Go mendefinisikan fungsi Handler yang meneruskan objek "robot" dan argumen string. ↩
Perhatikan bahwa wadah pengembangan selalu berisi kode terbaru di /opt/gopherbot
- Anda mungkin ingin misalnya cd /opt/gopherbot; git checkout v2.6.2.1; make
↩