序章

最近の多くのDevOpsチームは、チャットルームの周りにますます多くのインフラストラクチャを配置しています。 商用オプション(HipChatやSlackなど)からDIYオプション(IRCやJabber / XMPPなど)まで、利用可能なチャットルームはたくさんあります。 このチャットルームインフラストラクチャの背後にある主な動機の1つは、チャットルームボットによるものです。チャットルームボットは、DevOpsチームが作業をより迅速かつ効率的に行うために使用します。 この動きは、ChatOpsと呼ばれることもあります。

この記事では、GitHubのHubotに大きく影響を受けたボットLitaのインストール方法について概説します。 Litaは完全にRubyで記述されており、HipChat、Campfire、IRCなどのさまざまな種類のチャットルームで動作します。 そのユーティリティは主に、Google検索の実行やWebサイトの展開などを実行できるプラグインに追加できることから得られます。

このチュートリアルでは、Litaを独自のUbuntuサーバーにインストールし、IRCチャネルに接続して、プラグインのインストールを開始する手順を説明します。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • 1つのUbuntu14.04ドロップレット。

  • このチュートリアルに従って設定できるsudo非rootユーザー。

  • IRCで使用するためにLitaをセットアップするので、自分でIRCに接続して、チャネルに参加する必要もあります。

IRCにアクセスする方法はいくつかあります。 独自のIRCサーバーをセットアップできますが、Litaを試しているだけの場合は、パブリックサーバー(freenode、IRCnet、EFnetなど)を使用する方が簡単です。

特にFreenodeにはシンプルなウェブチャットが用意されているので、IRCクライアントをダウンロードしなくても接続できます。 使用するには、一意のニックネームとチャンネル名を選択し、接続をクリックします。 このチュートリアルでは、Freenodeを使用していることを前提としています。

ステップ1—Litaをインストールする

このステップでは、Litaとその依存関係をインストールします。

Litaが書かれている言語であるRubyをインストールする必要があります。 RubyはデフォルトのUbuntuリポジトリに含まれていますが、14.04で利用可能なRubyのバージョンは、Litaが機能するには古すぎます。

したがって、最初に、より新しいバージョンのPPA(Personal Package Archive)をロードします。

  1. sudo apt-add-repository ppa:brightbox/ruby-ng

次に、サーバー上のパッケージを更新します。

  1. sudo apt-get update

次に、RubyとLitaが必要とするいくつかの追加の依存関係をインストールします。

  1. sudo apt-get install ruby2.2 ruby2.2-dev build-essential libssl-dev redis-server

最後に、rubyのパッケージマネージャーであるRubyGemsを使用してLitaをインストールします(APTがUbuntuのパッケージマネージャーであるように)。 APTはコマンドapt-getを使用します。 RubyGemsはコマンドgemを使用します。

LitaとLitaIRCアダプターをインストールします。

  1. sudo gem install lita
  2. sudo gem install lita-irc

ステップ2—Litaを構成する

これでLitaのソフトウェアがインストールされたので、このステップでは、ボットを作成し、IRCチャネルに接続するように設定します。

次のコマンドは、新しいボットを作成します。 your_bot_nameをボットの一意のニックネームに置き換えます。

  1. lita new your_bot_name

このコマンドは、ホームディレクトリ~/your_bot_nameにもディレクトリを作成します。このディレクトリには、Gemfilelita_config.rbの2つのファイルが含まれています。 Gemfileは、ロードするプラグインをRubyに指示します。 lita_config.rbは、すべてのプラグイン構成設定が保存される場所です。 lita-ircプラグインの場合、lita_config.rbには、IRCサーバー、チャネル、ニックネームなどの情報が含まれます。

Litaを起動する前に、ボットがIRCに接続する方法を認識できるように、これらの構成ファイルを編集する必要があります。 まず、新しいディレクトリに移動します。

  1. cd ~/your_bot_name/

Gemfileを開いて、nanoまたはお気に入りのテキストエディタを使用して編集します。

  1. nano Gemfile

# gem "lita-irc"を見つけて、行の先頭にある#`を削除します。これによりコメントが解除されます。

Gemfileの変更された抜粋
. . .

# Uncomment to use the IRC adapter
gem "lita-irc"

. . .

次に、ファイルを保存して閉じます。

次に、lita_config.rbファイルを開きます。

  1. nano lita_config.rb

ファイルの先頭にあるconfig.robot.nameパラメーターをLitaからボットのニックネームに変更します。

lita_config.rb変更された抜粋
Lita.configure do |config|
  # The name your robot will use.
  config.robot.name = "your_bot_name"
  
. . .

少し下の方で、config.robot.adapterパラメーターを:shellから:ircに変更します。

lita_config.rb変更された抜粋
. . .

  # The adapter you want to connect with. Make sure you've added the
  # appropriate gem to the Gemfile.
  config.robot.adapter = :irc

. . .

次に、ファイルの下部で、最後の行endの前に次の行(以下で強調表示)を追加します。

インデントを正しくコピーし、config.adapters.irc.channels行とconfig.adapters.irc.user行のプレースホルダー変数をそれぞれチャンネル名とボット名に置き換えてください。 Freenode以外のIRCサーバーを使用している場合は、config.adapters.irc.serverも適切に変更する必要があります。

lita_config.rb変更された抜粋
. . .

  ## Example: Set configuration for any loaded handlers. See the handler's
  ## documentation for options.
  # config.handlers.some_handler.some_config_key = "value"
  
  config.adapters.irc.server = "irc.freenode.net"
  config.adapters.irc.channels = ["#your_channel_name"]
  config.adapters.irc.user = "your_bot_name"
  config.adapters.irc.cinch = lambda do |cinch_config|
    cinch_config.max_reconnect_delay = 123
  end
  
end

ファイルを保存して閉じます。

‘lita-irc’プラグインに渡すことができるオプションの完全なリストについては、lita-ircプラグインのGitHubページを確認してください。

ステップ3—チャネルに接続する

このステップでは、ボットを起動して管理者を設定します。

選択したIRCクライアントまたはWebクライアントを使用してIRCに接続していること、およびLitaに参加させたいチャネルにいることを確認してください。 次に、ボットを起動します。

  1. lita start

たくさんの出力が表示されます。 しばらくすると、ボットが指定したIRCチャネルに参加するのがわかります。

この時点では、ボットに何をするかを教えていないので、まだあまり役に立ちません。 いくつかの機能を追加する前に、ユーザーを管理者として定義しましょう。 これを行うには、ボットにIDを尋ねる必要があります。 次の行をIRCチャネルに送信します。

 your_bot_name users find your_irc_nickname

ボットは次のように応答します。

IRCでのリタの反応
your_irc_nickname<(ID: ff97cx41-b7fd-4x9b-x76d-e76xf443c65x, Mention name: your_irc_nickname)

IDをコピーし、サーバーの端末にCTRL+Cと入力してLitaを停止します。

lita_config.rbファイルを再度開きます。

  1. nano lita_config.rb

ファイルの最後で、最後のendの前に、次の行を追加します。 ここのIDをコピーしたIDに置き換えます。

Gemfileの変更された抜粋
...

  config.adapters.irc.cinch = lambda do |cinch_config|
    cinch_config.max_reconnect_delay = 123
  end

  config.robot.admins = ["f97cx41-b7fd-4x9b-x76d-e76xf443c65x"]

end

ファイルを保存して閉じます。

ステップ4—プラグインを追加する

この時点で、ボットはIRCに接続できますが、できることはこれだけです。 このステップでは、いくつかの便利な機能を追加するためのサンプルプラグインをインストールします。

Rubyで独自のプラグインを作成することもできますが、数百の既製のプラグインから選択できます。 例として、 lita-digプラグイン DNS レコードルックアッププラグイン)のインストールについて説明しますが、プロセスは他のプラグインと非常に似ています。

まず、lita-digプラグインをインストールしましょう。

  1. sudo gem install lita-dig

次に、Gemfileを開いて再度編集します。

  1. nano Gemfile

ファイルの最後に次の行を追加します。

gem "lita-dig"

ファイルを保存して閉じてから、ボットを再起動します。

  1. lita start

それでおしまい! ボットが再接続したら、次の行をIRCチャネルに送信します。

your_bot_name dig digitalocean.com

ボットは、;; Answer received from 8.8.8.8:53 (114 bytes)のようなもので始まるいくつかの行で応答します。 これは、プラグインが機能していることを意味します。

ステップ5—アップスタートスクリプトを書く

これまでのすべてのステップで、ボットを手動で起動する必要がありました。 これはテストには問題ありませんが、より良い解決策があります。 このステップでは、ボットを管理するためのUpstartスクリプトを作成し、ボットの開始、停止、再起動を簡単にします。 Upstartスクリプトの詳細については、このUpstartチュートリアルを確認してください。

まず、/etc/initlita-your_bot_name.confというファイルを作成します。

sudo nano /etc/init/lita-your_bot_name.conf

以下をファイルに貼り付け、your_usernameをサーバー上のsudonon-rootユーザーのユーザー名に置き換えます。

/etc/init/lita-<^>your_bot_name<^>。conf

start on runlevel [2345]
stop on runlevel [^2345]

chdir /home/your_username/your_bot_name
env HOME=/home/your_username
setuid your_username
setgid your_username

respawn
respawn limit 10 5

exec lita start

このスクリプトの機能について簡単に説明します。

start onおよびstop on行は、ボットをいつ開始および停止するかをUbuntuに指示します。 chdir行は、実際にボットを起動するexecコマンドを実行するときに、どのディレクトリにあるかをUpstartに通知します。

env行は、Rubyアプリケーションが設定ファイルの場所を認識できるようにするために必要です。 setuidおよびsetgidは、特定のユーザーとしてボットを起動するようにUpstartに指示します。 これらの行が省略されている場合、Upstartはボットをルートとして起動します。

respawn行は、ボットが中断またはクラッシュした場合にボットを再起動するようにUpstartに指示します。 respawn limitは、ボットが5秒間に10回クラッシュした場合に、Upstartが再出現するのを防ぎます。これは、より大きな問題を示しています。

次のコマンドを使用して、構文チェックプログラムである組み込みの linter を使用することにより、このスクリプトの構文が正しいことを確認できます。

sudo init-checkconf /etc/init/lita-your_bot_name.conf

構文が正しい場合は、次の出力が表示されます。

リンター出力を修正する
File /etc/init/lita-your\_bot\_name.conf: syntax ok.

構成ファイルの構文を確認したら、次のコマンドを入力して、Upstartスクリプトでボットを起動します。

  1. sudo start lita-your_bot_name

次のような行が表示されます。

アップスタート出力
lita-your_bot_name start/running, process 1234

ボットはまもなくIRCチャネルに参加するはずです。 これでサーバーからログアウトでき、ボットは引き続き実行されます。

結論

このチュートリアルでは、プラグインとUpstartスクリプトを使用してLitaをインストールおよび構成しました。 一意のボット名とUpstartスクリプトを使用すると、さまざまなプラグインを使用して、さまざまなチャットルームで複数のボットを実行することもできます。

企業全体が、このようなチャットボットからITインフラストラクチャ全体を実行しています。 Jenkinsなどの一般的なCIビルドサービスへのカスタムフックからGitLabsリポジトリの制御まで、チャットボットを使用すると、作業を簡素化、合理化、自動化できます。