如何在Ubuntu 16.04上安装Buildbot

Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布流程。它使用Python的Twisted库来处理Buildmaster和一个或多个worker之间的异步通信,以...

介绍

Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布流程。 它使用Python的Twisted库来处理构建主管和一个或多个工作人员之间的异步通信,以便于在多个平台上测试构建。 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

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

sudo -H pip install 'buildbot[bundle]'

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

Successfully installed Automat-0.5.0 Jinja2-2.9.6 MarkupSafe-1.0 
PyJWT-1.5.0 Tempita-0.5.2 Twisted-17.1.0 attrs-16.3.0 autobahn-17.5.1 
buildbot-0.9.6 buildbot-console-view-0.9.6 buildbot-waterfall-view-0.9.6 
buildbot-worker-0.9.6 buildbot-www-0.9.6 constantly-15.1.0 
decorator-4.0.11 future-0.16.0 incremental-16.10.1 pbr-3.0.0 
python-dateutil-2.6.0 six-1.10.0 sqlalchemy-1.1.9 
sqlalchemy-migrate-0.11.0 sqlparse-0.2.3 txaio-2.7.1 zope.interface-4.4.0

它也可能会显示一个升级点的建议:

. . .
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: 0.9.6
Twisted version: 17.1.0

在本教程的先决条件中,我们配置了一个UFW防火墙,仅允许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目录中,我们将配置我们的主人和工作人员:

第2步 - 配置Master

我们将使用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.sample复制到master.cfg ,并将原始文件保留在适当位置以供参考:

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

然后,我们将编辑文件,让我们从本地机器到达Web界面。

nano ~/master/master.cfg

为了从桌面或其他设备访问Web界面,我们将将buildbotURLlocalhost更改为buildbotURL的IP地址或域名。 master.cfg中设置了其他重要的配置值,但现在我们将保留其余的默认值。

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

〜/主/ Master.cfg中
c['buildbotURL'] = "http://IP_or_site_domain:8010/"

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

〜/主/ 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")]
. . .

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

修改'buildbotURL' ,保存并退出文件,然后启动主控:

buildbot start ~/master
Following twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.

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

http:// IP_or_site_domain :8010/

Buildbot的欢迎屏幕截图

现在我们已经掌握了主程序,并已经验证了我们可以访问Web界面,我们将创建一个示例工作者。

第3步 - 配置工作人员

master.cfg文件中的工作人员的名称和密码与配置为使用主服务器的工作人员的名称和密码匹配时,建立主服务器和工作人员之间的关系。

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

  • worker是存储工作者设置的目录的名称
  • localhost是工作人员的主人运行的地址
  • example-workerexample-worker的名称,必须唯一标识~/master/master.cfg文件中的~/master/master.cfg
  • 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

当工作人员第一次连接时,它会将信息目录中的文件发送到运行的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: 0.9.6 - Twisted version: 17.1.0

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

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

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

第4步 - 运行测试版本

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

Buildbot的员工屏幕截图

直到建立第一个请求之后,“runtests”屏幕才会有很少的信息。 现在我们通过点击屏幕右上角的“强制”按钮强制一个:

屏幕截图显示强制按钮

这将弹出一个对话框,允许您输入有关强制构建的信息。
Buildbot的力量构建弹出窗口的屏幕截图

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

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

显示成功构建的截图

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

在此输入图像说明

您可能已经注意到,我们不需要登录才能执行此构建。 默认情况下,任何人都可以访问管理功能,所以在完成之前,我们将花一点时间将其锁定并创建一个用户帐户。 您可以在[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 restart ~/master

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

在此输入图像说明

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

在此输入图像说明

在这一点上,我们安装Buildbot是完整的,我们已经采取了最小的步骤来保护界面。 然而,用户名和密码正在以纯文本形式发送。 我们建议作为下一步,在使用Buildbot认真地使用反向代理来保护Web界面之前。

结论

在本教程中,我们已经在同一台机器上安装并配置了Buildbot master和本地Buildbot worker。 如果您正在评估Buildbot,您可能需要参加项目的快速浏览

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