介绍
Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布流程。 它使用Python的Twisted库来处理构建主管和一个或多个工作人员之间的异步通信,以便于在多个平台上测试构建。 Buildbot是高度可配置的,并且对构建过程应如何工作做出很少的假设,使其适合复杂的构建过程或需要其工具随项目的独特需求而增长的项目。
在本教程中,我们将在同一台机器上安装和配置Buildbot buildmaster和worker。
先决条件
要遵循本教程,您将需要:
- Ubuntu 16.04服务器,具有至少1 GB的RAM ,配置有非root用户和防火墙,如Ubuntu 16.04初始服务器设置指南中所述。
服务器设置完成后,您就可以随时随地。
第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]'
根据您的服务器的速度,这可能需要一点时间才能完成。 成功安装的输出结果应如下所示:
OutputSuccessfully 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
它也可能会显示一个升级点的建议:
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: 0.9.6
Twisted version: 17.1.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
目录中,我们将配置我们的主人和工作人员:
第2步 - 配置Master
我们将使用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界面,我们将将buildbotURL
从localhost
更改为buildbotURL
的IP地址或域名。 master.cfg中设置了其他重要的配置值,但现在我们将保留其余的默认值。
在文件底部,找到buildbotURL
行,并将localhost
替换为您网站的IP地址或域名:
c['buildbotURL'] = "http://IP_or_site_domain:8010/"
注意: master.cfg
还在“Workers”部分中预定义了一个worker。
. . .
####### 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
OutputFollowing twistd.log until startup finished..
The buildmaster appears to have (re)started correctly.
最后,我们buildbotURL
我们配置的buildbotURL
在8010端口的Web浏览器中访问该站点:
http:// IP_or_site_domain :8010/
现在我们已经掌握了主程序,并已经验证了我们可以访问Web界面,我们将创建一个示例工作者。
第3步 - 配置工作人员
当master.cfg
文件中的工作人员的名称和密码与配置为使用主服务器的工作人员的名称和密码匹配时,建立主服务器和工作人员之间的关系。
在这一步中,我们将通过调用buildbot-worker
的create-worker
命令并传递四个设置来创建和配置一个worker:
-
worker
是存储工作者设置的目录的名称 -
localhost
是工作人员的主人运行的地址 -
example-worker
是example-worker
的名称,必须唯一标识~/master/master.cfg
文件中的~/master/master.cfg
。 -
pass
是工作人员的密码,此密码必须与~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
当工作人员第一次连接时,它会将信息目录中的文件发送到运行的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
OutputFollowing twistd.log until startup finished..
The buildbot-worker appears to have (re)started correctly.
既然master和worker都配置和运行,我们将执行一个测试构建。
第4步 - 运行测试版本
要运行测试版本,我们将在Web界面中打开“Builds”菜单,然后选择“Workers”。 应该显示示例worker和我们在info/admin
和info/host
设置的info/admin
。 从这里,我们可以单击默认构建器“runtests”来强制构建。
直到建立第一个请求之后,“runtests”屏幕才会有很少的信息。 现在我们通过点击屏幕右上角的“强制”按钮强制一个:
这将弹出一个对话框,允许您输入有关强制构建的信息。
对于这个测试版本,我们将把这些字段留空,点击弹出窗口中的“开始生成”按钮。 请注意,如果您在“您的姓名”字段中输入值,则必须包含有效的电子邮件地址。
几秒钟内,构建应成功完成:
您可以通过单击其名称旁边的数字或箭头来浏览构建中每个步骤的详细信息:
您可能已经注意到,我们不需要登录才能执行此构建。 默认情况下,任何人都可以访问管理功能,所以在完成之前,我们将花一点时间将其锁定并创建一个用户帐户。 您可以在[Buildbot的授权文档]( http://docs.buildbot.net/current/developer/authz.html )中了解有关可用选项的更多信息。
再次打开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 restart ~/master
当我们重新加载Web界面时,右上角会出现一个链接,它表示匿名,并且不再可以访问管理功能。
我们将通过单击“匿名”来测试我们刚添加的凭据,这将打开一个登录框,我们可以输入我们配置的用户名和密码。 当我们登录时,我们应该看到,当“匿名”不再有权启动构建时,我们的“Sammy”用户就可以。
在这一点上,我们安装Buildbot是完整的,我们已经采取了最小的步骤来保护界面。 然而,用户名和密码正在以纯文本形式发送。 我们建议作为下一步,在使用Buildbot认真地使用反向代理来保护Web界面之前。
结论
在本教程中,我们已经在同一台机器上安装并配置了Buildbot master和本地Buildbot worker。 如果您正在评估Buildbot,您可能需要参加项目的快速浏览 。
否则,请继续下一个教程“ 如何为 Buildbot 创建Systemd单元文件” ,以允许服务器的init系统管理Buildbot进程。