如何在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
,其中包含两个文件:Gemfile
和 lita_config.rb
。 Gemfile
告诉 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.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 加入的频道中。 然后,启动你的机器人。
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 on
和 stop on
行告诉 Ubuntu 何时启动和停止机器人。 chdir
行告诉 Upstart 在执行 exec
命令时要在哪个目录中,这实际上启动了机器人。
env
行是必需的,以便 Ruby 应用程序知道其设置文件的位置。 setuid
和 setgid
告诉 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 存储库,使用聊天机器人可以简化、简化和自动化您的工作。