Gopherbot は、Slack 1チームのインフラストラクチャと開発タスクを柔軟に自動化およびオーケストレーションできるように設計されています。 Bash 2 、Python、Ruby、Go 3のスクリプトとライブラリをサポートし、複雑な多言語ワークフローをサポートする動的なパイプラインベースのアーキテクチャを備えています。コア エンジンは、自動化に使用される構成 (主に YAML)、スクリプト、ライブラリを含む Git リポジトリから個々のチーム ロボットをブートストラップして更新します。また、各言語のシンプルなロボット API を使用して、チャット ベースの対話、状態追跡、同時実行を大幅に簡素化します。
検討中のスローガン:
Gopherbot は、インフラストラクチャ内のサーバー/VM またはコンテナー上で Linux プロセスとして実行されます。起動時に、ロボットの git リポジトリと暗号化された資格情報を取得するために必要ないくつかの環境変数を調べて、チーム チャットに接続します。そこから、キャプチャ グループがコマンド ライン引数として Bash、Ruby、Python、または Go 4で記述されたスクリプトに渡される正規表現に一致する CLI のようなコマンドに応答できます。これらのプラグインは、リソースのプロビジョニング、レポートの実行、ソフトウェアのデプロイ、CI/CD との対話など、DevOps エンジニアがチーム チャットで提供したいほぼすべての機能を実行できます。ほとんどのロボットは、組み込みの cron 機能でスケジュールされたか、CI/CD からの「ビルド完了」通知や 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 パイプラインは 2 つのコンテナー バリアントを作成します。
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
PRさん大歓迎です。開発、テスト、コラボレーションについては、LinuxJedi Slack チームへの招待状をメールでお送りください。
Gopherbot には、Go で他のプロトコル コネクタを記述するためのモジュラー インターフェイスがあります。現在、Slack とターミナル コネクタのみがサポートされています ↩
現在の 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
↩ cd /opt/gopherbot; git checkout v2.6.2.1; make