Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。它使用Python的Twisted库来处理buildmaster和多个worker之间的异步通信,以便在多个平台上测试构建。Buildbot具有高度可配置性并且几乎可秒级应对构建过程,使其适用于复杂的构建过程或需要其工具随项目的独特需求而增长的项目。在本教程中,我们将在同一台机器上安装和配置Buildbot buildmaster和worker。
要学习本教程,您需要:
设置服务器后,您就可以继续使用了。
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.sample
到master.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。
当master.cfg
文件中的worker名称和密码与配置为使用master的worker的名称和密码匹配时,将建立master和worker之间的关系。
这一步中,我们将通过调用buildbot-worker
的create-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/admin
和info/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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。