如何在Ubuntu上安装Buildbot

介绍

Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。它使用Python的Twisted库来处理buildmaster和多个worker之间的异步通信,以便在多个平台上测试构建。Buildbot具有高度可配置性并且几乎可秒级应对构建过程,使其适用于复杂的构建过程或需要其工具随项目的独特需求而增长的项目。在本教程中,我们将在同一台机器上安装和配置Buildbot buildmaster和worker。

准备

要学习本教程,您需要:

  • 一台具有至少1 GB的RAM的Ubuntu 16.04服务器,我们建议您使用腾讯云免费开发者实验室进行试验,或点击这里购买服务器。

设置服务器后,您就可以继续使用了。

第一步 - 安装Buildbot

Buildbot项目建议使用Python PackageIndex(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]'

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

. . . 
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本身:

. . .
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
Collecting 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
Buildbot version: 1.0.0
Twisted version: 17.9.0

服务器默认情况下,仅仅允许SSH流量,我们需要更改,先看看系统状态。

sudo ufw status
Status: 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:

第二步 - 配置主服务器

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

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

下一步,我们将复制master.cfg.samplemaster.cfg并保留原始数据以供参考:

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

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

nano ~/master/master.cfg

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

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

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

注:master.cfg还在worker部分中预定义了一个"Workers" 选项,具体如下: . . . ####### 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")] . . . 在本教程的后面,我们将使用这些内容创建一个worker。

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

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

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

输入以下命令检查主服务器的配置:

buildbot checkconfig ~/master

如果语法正常,您将收到以以下消息输出:

. . . 
Config file is good!

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

buildbot start ~/master

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

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

最后,让我们在我们配置的buildbotURL上8010端口上访问该站点:http://IP_or_site_domain:8010/

既然我们已经运行了master并且已经验证我们可以访问Web界面,那么我们将创建示例worker。

第三步 - 配置Worker

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

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

  • worker 是将存储设置的目录的名称
  • localhost 是worker的master运行的地址
  • example-worker是worker的名称,必须是~/master/master.cfg文件中的worker。
  • pass是密码,此密码必须与~master/master.cfg中的值匹配。
buildbot-worker create-worker ~/worker localhost example-worker pass
mkdir /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速度,安装的相关库的版本,以及最后在worker上运行的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
Following twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.

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

第四步 - 运行测试版本

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

在第一次构建请求之前,屏幕将没有信息提示。我们现在点击屏幕右上角的“强制”按钮强制一个:

这将打开一个对话框,输入您有关强制构建的信息。

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

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

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

您可能已经注意到我们不需要登录来执行此构建。默认情况下,任何人都可以访问管理功能,因此在我们完成之前,我们会将其锁定并创建一个用户帐户。

再次打开master.cfg文件:

nano ~/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
Config file is good!

如果未显示任何错误,请重新启动主服务:

buildbot restart ~/master

当我们重新加载Web界面时,右上角会显示一个链接,该链接显示Anonymous,并且不再能够访问管理功能。

我们将通过单击“Anonymous”来测试我们刚刚添加的凭据,这将打开一个登录框,我们可以输入我们配置的用户名和密码。当我们登录时,“匿名”不再有权启动构建。

此时,我们的Buildbot安装已经完成,我们采取了最小的步骤来保护界面。但是,用户名和密码以纯文本形式传输。因此我们建议您使用SSL加密相关的内容,相关教程可以参考这里

结论

在本教程中,我们在同一台机器上安装并配置了Buildbot主服务器和本地Buildbot工作程序。更多Buildbot教程,请持续关注腾讯云+社区的文章。


参考文献:《How To Install Buildbot on Ubuntu 16.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏苦逼的码农

Linux达人养成计划2---虚拟机下的网络配置

当然也可以选择其他模式,不过这里,我们只讲桥接模式的,至于三种模式的区别,可以自行百度一下。

1313
来自专栏互联网杂技

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换。 tomcat服务器两台,由nginx进行反向代理和负载均衡...

5638
来自专栏小巫技术博客

Android多模块构建合并aar解决方案

7113
来自专栏编程微刊

SourceTree安装(小白特别详细教程)

首先,下载SourceTree,谷歌搜索SourceTree,第一第二个就是下载网址。

1.2K2
来自专栏云计算教程系列

如何在Debian 9上安装Linux,Apache,MariaDB,PHP(LAMP)堆栈

“LAMP”堆栈是一组开源软件,通常安装在一起以使服务器能够托管动态网站和Web应用程序。这个术语实际上是一个缩写,代表L inux操作系统,带有A pache...

3603
来自专栏云计算教程系列

如何在Debian 8上安装Munin监视工具

Munin是一个系统,网络和基础设施监控应用程序,通过Web浏览器以图形形式提供信息。它是围绕客户端 - 服务器架构设计的,可以配置为监控它所安装的机器(Mun...

560
来自专栏WindCoder

ubuntu中常用命令

作用:赋予当前命令行为管理员权限。 样式:sudo 其它命令 举例:sudo su #切换到超级管理员权限模式#

2522
来自专栏逸鹏说道

安装和搭建基于netcore的demo

系统CentOS安装:   网上很多教程,很详细,我就不再赘述了。在安装过程中,需要注意的是设置时区、个人账户密码、root密码(一定要注意,否则后续很麻烦)、...

3679
来自专栏云计算教程系列

如何在Ubuntu 16.04上安装Bro

Bro是一个开源网络分析框架和安全监控应用程序。它将OSSEC和osquery的一些最佳功能集成到一个包中。

2165
来自专栏cloudskyme

搭建hadoop1.2集群

环境准备 我使用的是vmware workstation,首先安装ubuntu 12.04,安装完成后通过vmware的clone,clone出两个虚机,设置的...

3063

扫码关注云+社区

领取腾讯云代金券