如何在 Ubuntu 16.04 上安装 Buildbot

介绍

Buildbot 是一个基于 Python 的连续集成系统,用于自动化软件构建、测试和发布流程. 它使用 Python 的 Twisted library来处理 buildmaster 和一个或多个员工之间的无同步通信,以便在多个平台上测试构建。

在本教程中,我们将在同一台机器上安装和配置Buildbot buildmaster和 worker。

前提条件

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

  • ** 具有至少 1 GB RAM 的 Ubuntu 16.04 服务器,配置为非 root 用户和防火墙,如 [Ubuntu 16.04 初始服务器设置指南] 所述。

当服务器已设置时,您已经准备好跟上。

步骤 1 - 安装 Buildbot

Buildbot 项目建议使用 Python 包指数, pip,来安装 Buildbot,以获得最新的版本,这通常比 Ubuntu 包中可用的版本更早。

我们将开始作为我们的sudo用户,并使用apt-get update来确保我们有最新的包列表:

1sudo apt-get update

接下来,我们将安装PIP本身:

1sudo apt-get install python-pip

一旦 pip 可用,我们将使用它来安装 Buildbot 包,其中包括主人和工人以及其他依赖,包括 Web 界面所要求的依赖。

1sudo -H pip install 'buildbot[bundle]'

取决于您的服务器的速度,这可能需要一点时间才能完成. 成功安装的输出的结尾应该看起来如下:

1[secondary_label Output]
2. . . 
3Successfully installed Automat-0.6.0 Jinja2-2.10 MarkupSafe-1.0 
4PyJWT-1.6.0 Tempita-0.5.2 Twisted-17.9.0 attrs-17.4.0 autobahn-18.3.1 
5buildbot-1.0.0 buildbot-console-view-1.0.0 buildbot-grid-view-1.0.0 
6buildbot-waterfall-view-1.0.0 buildbot-worker-1.0.0 buildbot-www-1.0.0 
7constantly-15.1.0 decorator-4.2.1 future-0.16.0 hyperlink-18.0.0 idna-2.6 
8incremental-17.5.0 pbr-3.1.1 python-dateutil-2.6.1 six-1.11.0 sqlalchemy-1.2.5 
9sqlalchemy-migrate-0.11.0 sqlparse-0.2.4 txaio-2.9.0 zope.interface-4.4.3

它还可能显示升级 pip 的建议:

1[secondary_label Output]
2. . .
3You are using pip version 8.1.1, however version 9.0.1 is available.
4You should consider upgrading via the 'pip install --upgrade pip' command.

虽然这不会影响我们的Buildbot安装,但我们会花一点时间升级到Pip的最新版本:

1sudo -H pip install --upgrade pip
1[secondary_label Output]
2Collecting pip
3 Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
4   100% |████████████████████████████████| 1.3MB 768kB/s
5Installing collected packages: pip
6 Found existing installation: pip 8.1.1
7   Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
8Successfully installed pip-9.0.1

最后,我们将通过检查版本来验证Buildbot的安装:

1buildbot --version
1[secondary_label Output]
2Buildbot version: 1.0.0
3Twisted version: 17.9.0

在教程的前提条件中,我们配置了一个UFW防火墙,仅允许SSH流量。

1sudo ufw status
1[secondary_label Output]
2Status: active
3
4To Action From
5--                         ------      ----
6OpenSSH ALLOW Anywhere
7OpenSSH (v6)               ALLOW Anywhere (v6)

Buildbot 使用端口 8010 用于 Web 界面,这是不允许的,所以我们现在将打开它。

1sudo ufw allow 8010

然后,我们会添加一个专用的系统用户和组来运行 Buildbot 服务:

1sudo addgroup --system buildbot
2sudo adduser buildbot --system --ingroup buildbot --shell /bin/bash

最后,我们将登录作为我们的新用户来安装Buildbot:

1sudo --login --user buildbot

这会将我们登录为buildbot用户,并将我们放入/home/buildbot目录中,在那里我们将配置我们的主人和工人:

步骤 2 – 配置主人

我们将使用 buildbot 命令 create-master 随后使用基础目录的值:

1buildbot create-master ~/master
1[secondary_label Output]
2mkdir /home/buildbot/master
3creating /home/buildbot/master/master.cfg.sample
4creating database (sqlite:///state.sqlite)
5buildmaster configured in /home/buildbot/master

接下来,我们将master.cfg.sample复制到master.cfg,并将原件留在位置上以供参考:

1cp ~/master/master.cfg.sample ~/master/master.cfg

然后,我们会编辑该文件,使我们能够从本地机器访问 Web 界面。

1nano ~/master/master.cfg

为了从桌面或其他设备访问 Web 接口,我们会将buildbotURLlocalhost更改为服务器的 IP 地址或域名。我们还会设置使用报告策略。

在文件的底部,找到buildbotURL行,并用您的网站的IP地址或域名替换localhost:

1[label ~/master/master.cfg]
2c['buildbotURL'] = "http://IP_or_site_domain:8010/"

<$>[注] 注: master.cfg也预定义了工人部分中的工人。

1[label ~/master/master.cfg]
2. . .
3####### WORKERS
4
5# The 'workers' list defines the set of recognized workers. Each element is
6# a Worker object, specifying a unique worker name and password. The same
7# worker name and password must be configured on the worker.
8c['workers'] = [worker.Worker("example-worker", "pass")]
9. . .

在教程中稍后,我们将创建一个使用这些凭据的工人。

接下来,在文件的底部,设置为buildbotNetUsageData指令的值。这定义了Buildbot是否会向开发人员报告使用统计数据,以帮助改善应用程序。您可以将此设置设置为None以退出此功能。如果您不介意返回有关您的使用的基本信息,请使用字符串基本而不是。 您可以在 [Buildbot 全球配置文档]中找到有关此设置的更多信息(https://docs.buildbot.net/latest/manual/cfg-global.html# buildbotnetusagedata):

1[label ~/master/master.cfg]
2c['buildbotNetUsageData'] = None
3# To send back basic information, use this instead:
4#c['buildbotNetUsageData'] = 'basic'

当你修改了buildbotURL并添加了buildbotNetUsageData行时,保存并退出文件。

通过键入检查主机的配置:

1buildbot checkconfig ~/master

您将收到结尾的输出,如果语法正常:

1[secondary_label Output]
2. . . 
3Config file is good!

如果输出显示有语法错误,请返回并再次检查文件.一旦checkconfig命令表示成功,请启动主机:

1buildbot start ~/master

当重启成功时,您应该收到以下确认:

1[secondary_label Output]
2Following twistd.log until startup finished..
3The buildmaster appears to have (re)started correctly.

最后,让我们在 8010 端口的 Web 浏览器中访问我们配置的buildbotURL:

「http://IP_or_site_domain:8010/`」

Screenshot of Buildbot's Welcome screen

现在我们有主机运行,并验证了我们可以访问 Web 界面,我们将创建示例工作者。

步骤 3 – 配置一名工人

主人与工人的关系是建立的,当一个工人的名称和密码在master.cfg文件中匹配使用主人配置的工人的名称和密码。

在此步骤中,我们将通过调用buildbot-workercreate-worker命令创建和配置工人,并通过四个设置:

  • worker 是将工人设置存储的目录名称
  • localhost 是工人主正在运行的地址
  • example-worker 是工人名称,必须在 ~/master/master.cfg 文件中单独识别工人。
1buildbot-worker create-worker ~/worker localhost example-worker pass
1[secondary_label Output]
2mkdir /home/buildbot/worker
3mkdir /home/buildbot/worker/info
4Creating info/admin, you need to edit it appropriately.
5Creating info/host, you need to edit it appropriately.
6Not creating info/access_uri - add it if you wish
7Please edit the files in /home/buildbot/worker/info appropriately.
8worker configured in /home/buildbot/worker

当工作者第一次连接时,它会将info目录中的文件发送到运行 buildmaster. 它们将在 Web 界面中显示,以便为开发人员提供有关测试失败的更多信息。

首先,打开包含管理员电子邮件的文件,删除示例行,你的名字在这里 <[email protected]>并用你的名字和电子邮件地址替换。

1nano ~/worker/info/admin
1[label ~/worker/info/admin]
2Sammy Shark <[email protected]>

完成后,保存并退出文件。

根据惯例,info/host文件提供了操作系统、版本、内存大小、CPU速度、安装的相关库版本,最后是运行在工人的Buildbot版本。

打开文件并粘贴相关信息,根据您的系统所需更新样本内容:

1nano ~/worker/info/host

更新您使用的信息,以反映您的系统的特点:

1[label ~/worker/info/host]
2Ubuntu 16.04.2 2GB Droplet - Buildbot version: 1.0.0 - Twisted version: 17.1.0

完成后,保存并退出. 最后,开始工作者:

1buildbot-worker start ~/worker
1[secondary_label Output]
2Following twistd.log until startup finished..
3The buildbot-worker appears to have (re)started correctly.

现在主机和工人都已配置和运行,我们将执行测试构建。

步骤 4 – 运行测试构建

要运行测试构建,我们将在 Web 界面中打开构建菜单,然后选择工人。我们在info/admininfo/host中设置的示例工作者和信息应该显示。

Screenshot of Buildbot’s Workers Screen

在第一个构建请求之前,运行测试屏幕将有很少的信息,我们现在将通过点击屏幕右上方的强制按钮来强迫一个:

Screenshot showing the force button

This will bring up a dialog which allows you to enter information about the forced build. Screenshot of Buildbot's force build popup

对于这个测试构建,我们会把字段留空,然后点击开始构建按钮,请注意,如果你在你的名字字段中输入一个值,它必须包含一个有效的电子邮件地址。

在几秒钟内,构建应该成功完成:

Screenshot showing successful build

您可以通过点击名称旁边的数字或箭头来探索构建中的每个步骤的详细信息:

enter image description here

默认情况下,任何人都可以访问管理功能,所以在我们完成之前,我们会花一段时间来锁定它并创建用户帐户。您可以了解更多关于可用的选项 ins [Buildbot的授权文档].(http://docs.buildbot.net/current/developer/authz.html)

再次打开master.cfg文件:

1nano ~/master/master.cfg

在文件的底部,添加以下行,更改用户名和密码。

 1[label File: ~/master/master.cfg]
 2. . .
 3c['www']['authz'] = util.Authz(
 4       allowRules = [
 5           util.AnyEndpointMatcher(role="admins")
 6       ],
 7       roleMatchers = [
 8           util.RolesFromUsername(roles=['admins'], usernames=['Sammy'])
 9       ]
10)
11c['www']['auth'] = util.UserPasswordAuth({'Sammy': 'Password'})

完成后,在文件上运行另一个语法检查:

1buildbot checkconfig ~/master
1[secondary_label Output]
2Config file is good!

如果没有出现错误,请重新启动主服务:

1buildbot restart ~/master

当我们重新加载 Web 界面时,应该在右上方出现一个链接,该链接表示匿名,并且访问管理功能不再可用。

enter image description here

我们将通过点击匿名来测试我们刚刚添加的身份证,这将带来一个登录框,在那里我们可以输入我们配置的用户名和密码。

enter image description here

此时,我们的 Buildbot 安装已经完成,我们已经采取了最小步骤来保护接口. 然而,用户名和密码正在以简单的文本传输。 我们建议作为下一步,并在使用 Buildbot 之前认真地使用 反向代理来保护 Web 接口。

结论

在本教程中,我们在同一台机器上安装并配置了 Buildbot 主机和本地 Buildbot 工人. 如果您正在评估 Buildbot,您可能想要使用该项目的 Quick Tour

否则,继续到下一个教程, How To Create Systemd Unit Files for Buildbot,以允许服务器的 init 系统管理 Buildbot 流程。

Published At
Categories with 技术
comments powered by Disqus