Docker将根据我们在其中列出的命令开始构建您的镜像Dockerfile。它将下拉基本镜像及其依赖层,安装Node.js,然后将生成的环境保存到一个名为npm-worker的镜像中。
配置Buildbot主服务器现在我们有了Docker镜像,我们可以配置Buildbot主机来使用它。
因为我们正在定义一个全新的构建过程,并且因为到目前为止我们对主配置的定制很少,所以我们将从头开始配置。为避免丢失当前信息,我们将原始文件移动到备份文件:
$ sudo mv /home/buildbot/master/master.cfg /home/buildbot/master/master.cfg.bak显示备份文件的配置,以便我们可以复制一些重要值以在新配置中使用:
$ sudo cat /home/buildbot/master/master.cfg.bak我们要转移到新配置的重要部分是用户凭据和权限。在输出中查找c['www']['authz']和c['www']['auth']开头的配置部分:
. . . 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主配置中,以保留我们的用户和身份验证设置。
现在,创建一个新master.cfg文件,我们可以在其中重新定义Buildbot实例的行为:
$ sudo nano /home/buildbot/master/master.cfg我们将在此文件中定义新的Buildbot主配置。
设置基本项目配置
Buildbot配置文件实际上是一个Python模块,它以牺牲一些复杂性为代价提供了极大的灵活性。
我们将从一些基本配置开始。将以下行粘贴到您的文件中:
/home/buildbot/master/master.cfg
# -*- python -*- # ex: set filetype=python: from buildbot.plugins import * c = BuildmasterConfig = {} # Basic config c['buildbotNetUsageData'] = None c['title'] = "Hello Hapi" c['titleURL'] = "https://github.com/your_github_name/hello_hapi" c['buildbotURL'] = "https://buildmaster_domain_name/" c['protocols'] = {'pb': {'port': 9989}}该文件的顶部包含一些注释,许多文本编辑器能够解释这些注释以正确应用语法高亮显示。然后,我们从buildbot.plugins包中导入所有内容,以便我们可以使用工具来构建配置。
Buildbot配置全部由名为BuildmasterConfig的字典定义,因此我们将此变量设置为空字典以启动。
我们创建一个名为c的速记变量,设置为同一个字,以减少整个文件中所需的输入量。
下面的配置中需要注意的一些事项:
buildbotNetUsageData设置为None。如果要向开发人员报告使用情况数据,请将其更改为字符串"basic"。
title和titleURL反映项目的名称和GitHub的仓库。使用指向您自己的fork的链接。
buildbotURL设置为Buildbot主服务器的SSL安全域名。记得从https://开始并以尾部斜杠/结束。
与我们的上一个配置不同,该protocol定义并不会和本地主机绑定。我们需要通过Docker桥接网络docker0允许来自Docker容器的连接。
配置Docker Worker
接下来,我们需要定义我们的Docker worker。Buildbot将根据需要使用Docker来配置工作人员。为此,它需要知道如何连接到Docker以及使用哪个映象。
将以下内容粘贴到文件的底部:
/home/buildbot/master/master.cfg
. . . # Workers c['workers'] = [] c['workers'].append(worker.DockerLatentWorker("npm-docker-worker", None, docker_host='unix://var/run/docker.sock', image='npm-worker', masterFQDN='buildmaster_domain_name'))该c['workers'] =[]行演示了我们在完成配置时将使用的基本约定。我们将配置字典中的键设置为空列表。然后,我们将元素附加到列表以实现实际配置。这使我们可以在以后添加其他元素。
为了定义我们的worker,我们创建一个worker.DockerLatentWorker实例并将其追加到worker列表中。我们将此工作者命名为npm-docker-worker,以便稍后在配置中引用它。然后我们将docker_host设置为Docker的套接字位置,并提供我们创建的Docker镜像的名称(在我们的例子中为npm-worker)。我们将masterFQDN设置为Buildbot master的域名,以确保容器可以到达主服务器,而不管服务器的内部主机名设置如何。
配置调度程序
接下来,我们将定义一个调度程序。Buildbot使用调度程序根据从变更源或更改挂钩收到的更改来决定何时以及如何运行构建(稍后我们将配置更改挂钩)。
将以下配置粘贴到文件的底部:
/home/buildbot/master/master.cfg
. . . # Schedulers c['schedulers'] = [] c['schedulers'].append(schedulers.SingleBranchScheduler(, change_filter=util.ChangeFilter(project='your_github_name/hello_hapi', branch='master'), treeStableTimer=3, builderNames=["npm"]))