如何在Ubuntu16.04上安装Buildbot

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

介绍

Buildbot 是一个基于 Python 的持续集成系统,用于自动化软件构建、测试和发布过程。 它使用 Python 的 Twisted 库 来处理 buildmaster 和一个或多个 worker 之间的异步通信,以促进在多个平台上测试构建。 Buildbot 是高度可配置的,并且对构建过程应该如何工作做出很少的假设,使其适用于复杂的构建过程或需要其工具随着项目的独特需求而增长的项目。

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

先决条件

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

设置服务器后,您就可以继续操作了。

第 1 步 — 安装 Buildbot

Buildbot 项目建议使用 Python 包索引 pip 来安装 Buildbot 以获得最新版本,该版本通常比 Ubuntu 包中可用的版本早几个版本。

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

sudo apt-get update

然后,我们将安装 pip 本身:

sudo apt-get install python-pip

一旦 pip 可用,我们将使用它来安装 Buildbot 包,其中包括 master 和 worker 以及其他依赖项,包括 Web 界面所需的那些。 Pip 在执行它的用户的主目录中创建 .cache 文件。 我们将使用 sudo-H 标志将这些文件放在正确的位置:

sudo -H pip install 'buildbot[bundle]'

根据服务器的速度,这可能需要一点时间才能完成。 成功安装的输出结束应如下所示:

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

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

Output. . .
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

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

sudo -H pip install --upgrade pip
OutputCollecting pip
 Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)
   100% |████████████████████████████████| 1.3MB 768kB/s
Installing collected packages: pip
 Found existing installation: pip 8.1.1
   Not uninstalling pip at /usr/lib/python2.7/dist-packages, outside environment /usr
Successfully installed pip-9.0.1

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

buildbot --version
OutputBuildbot version: 1.0.0
Twisted version: 17.9.0

在教程先决条件中,我们将 UFW 防火墙配置为仅允许 SSH 流量。 我们将验证状态:

sudo ufw status
OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

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

sudo ufw allow 8010

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

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

最后,我们将以新用户身份登录以安装 Buildbot:

sudo --login --user buildbot

这将使我们以 buildbot 用户身份登录,并将我们放置在 /home/buildbot 目录中,我们将在其中配置我们的 master 和 worker:

第 2 步 — 配置主控

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

buildbot create-master ~/master
Outputmkdir /home/buildbot/master
creating /home/buildbot/master/master.cfg.sample
creating database (sqlite:///state.sqlite)
buildmaster configured in /home/buildbot/master

接下来我们将 master.cfg.sample 复制到 master.cfg 并保留原件以供参考:

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

然后,我们将编辑该文件以允许我们从本地计算机访问 Web 界面。

nano ~/master/master.cfg

为了从桌面或其他设备访问 Web 界面,我们将 buildbotURLlocalhost 更改为服务器的 IP 地址或域名。 我们还将设置使用情况报告政策。 其他重要的配置值在 master.cfg 中设置,但我们现在将保留其余的默认值。

在文件底部附近,找到 buildbotURL 行并将 localhost 替换为您站点的 IP 地址或域名:

~/master/master.cfg

c['buildbotURL'] = "http://IP_or_site_domain:8010/"

注: master.cfg也在“Workers”部分预定义了一个worker。

~/master/master.cfg

. . .
####### WORKERS

# The 'workers' list defines the set of recognized workers. Each element is
# a Worker object, specifying a unique worker name and password.  The same
# worker name and password must be configured on the worker.
c['workers'] = [worker.Worker("example-worker", "pass")]
. . .

在本教程的后面,我们将使用这些凭据创建一个工作器。


接下来,在文件的底部,设置 buildbotNetUsageData 指令的值。 这定义了 Buildbot 是否会向开发人员报告使用统计信息以帮助改进应用程序。 您可以将其设置为 None 以选择退出。 如果您不介意发回有关使用情况的基本信息,请改用字符串 "basic"。 您可以在 Buildbot 全局配置文档 中找到有关此设置的更多信息:

~/master/master.cfg

c['buildbotNetUsageData'] = None
# To send back basic information, use this instead:
#c['buildbotNetUsageData'] = 'basic'

修改 'buildbotURL' 并添加 buildbotNetUsageData 行后,保存并退出文件。

通过键入以下内容检查主服务器的配置:

buildbot checkconfig ~/master

如果语法正确,您将收到以以下消息结尾的输出:

Output. . . 
Config file is good!

如果输出表明存在语法错误,请返回并再次检查文件。 一旦 checkconfig 命令指示成功,启动 master:

buildbot start ~/master

重启成功后,您应该会收到以下确认信息:

OutputFollowing twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.

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

http://IP_or_site_domain:8010/

现在我们已经运行了 master 并验证了我们可以访问 Web 界面,我们将创建示例 worker。

第 3 步 — 配置 Worker

master.cfg文件中worker的名称和密码与配置为使用master的worker的名称和密码匹配时,master和worker之间的关系就建立了。

在这一步中,我们将通过调用 buildbot-workercreate-worker 命令并传入四个设置来创建和配置工作器:

  • worker 是保存worker设置的目录名
  • localhost是worker的master运行的地址
  • example-worker是worker的名字,必须在~/master/master.cfg文件中唯一标识worker。
  • pass是worker的密码,这个密码必须和~master/master.cfg中的值一致。
buildbot-worker create-worker ~/worker localhost example-worker pass
Outputmkdir /home/buildbot/worker
mkdir /home/buildbot/worker/info
Creating info/admin, you need to edit it appropriately.
Creating info/host, you need to edit it appropriately.
Not creating info/access_uri - add it if you wish
Please edit the files in /home/buildbot/worker/info appropriately.
worker configured in /home/buildbot/worker

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

我们现在将配置这些。 首先,打开包含管理员电子邮件的文件,删除示例行 Your Name Here <admin@youraddress.invalid> 并将其替换为您的姓名和电子邮件地址。

nano ~/worker/info/admin

〜/工人/信息/管理员

Sammy Shark <sammy@digitalocean.com>

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

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

打开文件并粘贴相关信息,根据系统需要更新示例内容:

nano ~/worker/info/host

更新您用来反映系统细节的信息:

〜/工人/信息/主机

Ubuntu 16.04.2 2GB Droplet - Buildbot version: 1.0.0 - Twisted version: 17.1.0

完成后,保存并退出。 最后,启动worker:

buildbot-worker start ~/worker
OutputFollowing twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.

现在 master 和 worker 都已配置并运行,我们将执行测试构建。

第 4 步 — 运行测试构建

要运行测试构建,我们将在 Web 界面中打开“Builds”菜单,然后选择“Workers”。 应该显示示例工人和我们在info/admininfo/host中设置的信息。 从这里,我们可以单击默认构建器“runtests”来强制构建。

在发出第一个构建请求之前,“运行测试”屏幕几乎没有信息。 我们现在将通过单击屏幕右上角的“强制”按钮来强制执行:

这将弹出一个对话框,允许您输入有关强制构建的信息。

对于此测试构建,我们将字段留空,然后单击弹出窗口中的“开始构建”按钮。 请注意,如果您确实在“您的姓名”字段中输入了值,则它必须包含有效的电子邮件地址。

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

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

您可能已经注意到我们不需要登录来执行此构建。 默认情况下,任何人都可以访问管理功能,因此在我们完成之前,我们将花点时间将其锁定并创建一个用户帐户。 您可以在 [Buildbot 的授权文档] 中了解有关可用选项的更多信息。(http://docs.buildbot.net/current/developer/authz.html)。

再次打开master.cfg文件:

nano ~/master/master.cfg

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

文件:~/master/master.cfg

. . .
c['www']['authz'] = util.Authz(
       allowRules = [
           util.AnyEndpointMatcher(role="admins")
       ],
       roleMatchers = [
           util.RolesFromUsername(roles=['admins'], usernames=['Sammy'])
       ]
)
c['www']['auth'] = util.UserPasswordAuth({'Sammy': 'Password'})

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

buildbot checkconfig ~/master
OutputConfig file is good!

如果没有报错,重启master服务:

buildbot restart ~/master

当我们重新加载 Web 界面时,右上角应该会出现一个链接,上面写着“匿名”并且无法再访问管理功能。

我们将通过单击“匿名”来测试我们刚刚添加的凭据,这将打开一个登录框,我们可以在其中输入我们配置的用户名和密码。 当我们登录时,我们应该看到虽然“匿名”不再有权开始构建,但我们的“Sammy”用户却可以。

至此,我们的 Buildbot 安装已经完成,我们已经采取了最小的步骤来保护界面。 但是,用户名和密码是以纯文本形式传输的。 作为下一步,在认真使用 Buildbot 之前,我们建议您使用 反向代理 保护 Web 界面。

结论

在本教程中,我们在同一台机器上安装并配置了 Buildbot master 和本地 Buildbot worker。 如果您正在评估 Buildbot,您可能希望参加该项目的 Quick Tour

否则,继续下一个教程,如何为 Buildbot 创建 Systemd 单元文件,以允许服务器的 init 系统管理 Buildbot 进程。