如何在Ubuntu14.04上为IRC安装LitaChatBot

来自菜鸟教程
跳转至:导航、​搜索

介绍

许多现代 DevOps 团队在聊天室周围放置了越来越多的基础设施。 有很多聊天室可供选择,从商业选项(如 HipChat 和 Slack)到 DIY 选项(如 IRC 或 Jabber/XMPP)。 这种聊天室基础设施背后的主要动机之一是聊天室机器人,DevOps 团队使用它来帮助更快、更有效地完成工作。 这种运动有时被称为 ChatOps。

本文将概述如何安装 bot Lita,它深受 GitHub 的 Hubot 启发。 Lita 完全用 Ruby 编写,可用于多种聊天室,如 HipChat、Campfire 和 IRC。 它的实用程序主要来自您可以添加到其中的插件,这些插件可以执行 Google 搜索或部署网站等操作。

在本教程中,我们将介绍在您自己的 Ubuntu 服务器上安装 Lita、将其连接到 IRC 频道并开始安装插件的步骤。

先决条件

要遵循本教程,您将需要:

  • 一个 Ubuntu 14.04 Droplet。
  • 一个sudo非root用户,可以按照本教程进行设置。
  • 因为我们将设置 Lita 以在 IRC 上使用,所以您还需要自己连接到 IRC 并加入频道。

有几种方法可以访问 IRC。 您可以 设置自己的 IRC 服务器,但如果您只是尝试 Lita,使用公共服务器(如 freenode、IRCnet 或 EFnet)会更容易。

尤其是 Freenode 有一个简单的 网络聊天 可用,因此您无需下载 IRC 客户端即可连接。 要使用它,请选择一个唯一的昵称和频道名称,然后单击 Connect。 本教程将假设您使用的是 Freenode。

第 1 步 — 安装 Lita

在这一步中,我们将安装 Lita 及其依赖项。

我们需要安装 Ruby,这是 Lita 所用的语言。 尽管 Ruby 包含在默认的 Ubuntu 存储库中,但 14.04 中可用的 Ruby 版本太旧,Lita 无法工作。

因此,首先,加载具有更新版本的 PPA(个人包存档)。

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

然后更新服务器上的软件包。

sudo apt-get update

接下来,安装 Ruby 和 Lita 需要的一些附加依赖项。

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

最后,我们将使用 RubyGems 安装 Lita,它是 ruby 的包管理器(很像 APT 是 Ubuntu 的包管理器)。 APT 使用命令 apt-get; RubyGems 使用命令 gem

安装 Lita 和 Lita IRC 适配器。

sudo gem install lita 
sudo gem install lita-irc

第 2 步 — 配置 Lita

现在安装了 Lita 的软件,因此在这一步中,我们将创建一个机器人并将其设置为连接到我们的 IRC 频道。

以下命令将创建一个新机器人。 将 your_bot_name 替换为您的机器人的唯一昵称。

lita new your_bot_name

该命令还将在您的主目录中创建一个目录 ~/your_bot_name,其中包含两个文件:Gemfilelita_config.rbGemfile 告诉 Ruby 要加载哪些插件。 lita_config.rb 是所有插件配置设置的存储位置。 对于lita-irc插件,lita_config.rb会有IRC服务器、频道、昵称等信息。

在启动 Lita 之前,我们需要编辑这些配置文件,以便您的机器人知道如何连接到 IRC。 首先,切换到新目录。

cd ~/your_bot_name/

使用 nano 或您喜欢的文本编辑器打开 Gemfile 进行编辑。

nano Gemfile

找到行 # gem "lita-irc" 并删除行开头的 # `,取消注释。

Gemfile 修改摘录

. . .

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

. . .

然后保存并关闭文件。

接下来,打开 lita_config.rb 文件。

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.channelsconfig.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 加入的频道中。 然后,启动你的机器人。

lita start

你会看到很多输出。 片刻之后,您将看到您的机器人加入了您指定的 IRC 频道。

在这一点上,我们还没有告诉我们的机器人如何做任何事情,所以它还不是很有用。 在我们添加一些额外的功能之前,让我们将我们的用户定义为管理员。 为此,您需要询问您的机器人您的 ID 是什么。 将以下行发送到 IRC 频道。

 your_bot_name users find your_irc_nickname

你的机器人会做出这样的回应:

Lita 在 IRC 中的回应

your_irc_nickname<(ID: ff97cx41-b7fd-4x9b-x76d-e76xf443c65x, Mention name: your_irc_nickname)

复制 ID,然后通过在服务器终端中输入 CTRL+C 来停止 Lita。

重新打开 lita_config.rb 文件。

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 插件。

sudo gem install lita-dig

接下来,再次打开Gemfile进行编辑。

nano Gemfile

在文件的最后添加以下行。

gem "lita-dig"

保存并关闭文件,然后重新启动机器人。

lita start

就是这样! 当您的机器人重新连接时,将以下行发送到 IRC 频道。

your_bot_name dig digitalocean.com

机器人将响应几行,以 ;; Answer received from 8.8.8.8:53 (114 bytes) 之类的开头。 这意味着您的插件正在运行!

第 5 步 — 编写 Upstart 脚本

到目前为止,在每一步中,我们都必须手动启动机器人。 这对于测试来说很好,但是有一个更好的解决方案。 在这一步中,我们将创建一个 Upstart 脚本来管理机器人,使其易于启动、停止和重新启动。 要更详细地了解 Upstart 脚本,请查看此 Upstart 教程

首先,在 /etc/init 中创建一个名为 lita-your_bot_name.conf 的文件。

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

将以下内容粘贴到文件中,将 your_username 替换为服务器上 sudo 非 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 onstop on 行告诉 Ubuntu 何时启动和停止机器人。 chdir 行告诉 Upstart 在执行 exec 命令时要在哪个目录中,这实际上启动了机器人。

env 行是必需的,以便 Ruby 应用程序知道其设置文件的位置。 setuidsetgid 告诉 Upstart 以特定用户身份启动机器人; 如果省略这些行,Upstart 将以 root 身份启动机器人。

respawn 行告诉 Upstart 如果它被中断或崩溃重新启动机器人。 如果机器人在 5 秒内崩溃 10 次,respawn limit 会阻止 Upstart 重生,这表明存在更大的问题。

我们可以使用内置的 linter 来检查这个脚本的语法是否正确,这是一个语法检查程序,使用以下命令。

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

如果语法正确,您应该会看到以下输出。

正确的 linter 输出

File /etc/init/lita-your\_bot\_name.conf: syntax ok.

检查配置文件的语法后,输入以下命令,使用 Upstart 脚本启动机器人。

sudo start lita-your_bot_name

您应该看到如下所示的一行:

新贵输出

lita-your_bot_name start/running, process 1234

您的机器人应该很快就会加入 IRC 频道; 您现在可以注销您的服务器,机器人将继续运行。

结论

在本教程中,我们使用插件和 Upstart 脚本安装和配置了 Lita。 借助独特的机器人名称和 Upstart 脚本,您甚至可以使用不同的插件在不同的聊天室中运行多个机器人。

整个公司都通过类似这样的聊天机器人运行他们的整个 IT 基础架构。 从自定义挂钩到流行的 CI 构建服务(如 Jenkins)到控制您的 GitLabs 存储库,使用聊天机器人可以简化、简化和自动化您的工作。