Chatbot Lita

Während ein paar sprintfreien Tagen bei der E-POST, den sogenannten EPDays, konnte ich mich mit dem Thema ChatOps befassen. Hier ging es darum einen Jabber-Bot zu haben, der für einen Aufgaben erledigt oder einen schneller Infos bereit stellt.

Wir hatten uns hier für Lita (lita.io) entschieden. Dies vor allen da er in Ruby geschrieben war, was ich eigentlich noch ein wenig kann. Die Konkurrenz war Hubot, da schreckte aber Node.js und Coffee-Script ab, hiermit hatte sich aus meinem Team noch nie jemand beschäftigt. Also eben Lita.

Konfiguration & Plugins

Der Bot lässt sich relativ leicht installieren. Man braucht nur ein Gemfile und min. Ruby 2.0.0, sowie eine kleine Redis-Installation (haben wir nicht großartig konfiguriert, nur installiert und gestartet, funktioniert dann out-of-the-box). Etwas komplizierter wird es dann bei den Plugins. Von denen gibt es zwar einige, doch sind sie teilweise in einem doch eher schlechten Zustand. So konnten wir das Plugin lita-xmpp nicht benutzen ohne es vorher patchen zu müssen. Ebenso ging es uns mit dem Plugin lita-jira. Wobei man hier sagen muss, das Plugin kann noch ganz ok sein, aber nicht die Schnittstelle worauf es beruht. Das Gem jira-ruby ist auch eher so meh. Es konnte nicht mit unseren Jira reden und musste auch erst noch gepatcht werden. Wobei wir hier noch nicht fertig geworden sind. Das Gerrit-Plugin (lita-gerrit) lies sich dann wohl doch recht einfach verwenden, was aber vornehmlich ein Kollege von mir machte.

Die Konfiguration von Lita lässt sich über eine einzige Datei steuern und ist recht schlicht gehalten, das ist echt gut, da man so auch mit mehreren Plugins nicht den Überblick verliert. Die Konfiguration erinnert ein wenig an Rails oder Vagrant.

Init

Das Gemfile braucht eigentlich nur lita selbst und dann eben noch alle Plugins die man so haben möchte. Bleibt also auch sehr schlank. Wir haben das ganze mit Bundler in einem Verzeichnis installiert und dann immer erstmal nur einzeln mit „bundle exec lita“ gestartet. Funktionierte, lief dann in einer Screen-Session. Aber für den Produktivbetrieb möchte man dann schon sowas wie ein Init-File haben. Damit haben wir uns aber noch nicht beschäftigt, da wir erst mal nur einen Prototypen bauen wollten.

Fazit

Abschliessend kann man sagen, dass nach 3 Tagen ein kleiner Prototyp lief, der aber nicht viel konnte. Es machte sich Ernüchterung breit. Ja, es funktioniert, aber man müsste noch eine ganze Menge Arbeit reinstecken, bis der Bot das kann, was wir eigentlich gewollt hätten. Vielleicht bekommen wir in nächster Zeit noch ein wenig mehr Freiraum um das alles umzusetzen.

Beide Anpassungen befinden sich in meinen öffentlichen Github.

jira-ruby – https://github.com/rwaffen/jira-ruby
lita-xmpp – https://github.com/rwaffen/lita-xmpp

Config

Lita.configure do |config|
config.robot.name = "Lita"
config.robot.log_level = :info

## config redis
config.redis.host = "127.0.0.1"
config.redis.port = 6379

## config jabber
config.robot.adapter = :xmpp
config.adapter.jid = "Lita@jabber.domain.de"
config.adapter.password = "somePassw0rd"
config.adapter.debug = false
config.adapter.rooms = ["chatbot"]
config.adapter.muc_domain = "conference.jabber.domain.de"

## config gerrit
config.handlers.gerrit.url = "http://gerrit.domain.de"
config.handlers.gerrit.username = "user"
config.handlers.gerrit.password = "password"

## config jira
config.handlers.jira.username = 'user'
config.handlers.jira.password = 'password'
config.handlers.jira.site = 'https://issue.domain.de'
config.handlers.jira.context = '/jira'
end

Gemfile

source "https://rubygems.org"

gem "lita"
gem "lita-xmpp", :git =>; 'https://github.com/rwaffen/lita-xmpp.git'
gem "lita-gerrit"
gem "lita-jira"
gem "jira-ruby", :git =>; 'https://github.com/rwaffen/jira-ruby.git', :branch => 'cookie_auth'
gem 'lita-chuck_norris'
gem "lita-excuses"