Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布过程。
在本教程中,我们将演示如何设置持续集成系统以自动测试对存储库的新更改。我们将使用一个简单的Node.js应用程序来演示测试过程和必要的配置。为了将我们的测试环境与Buildbot主机隔离,我们将创建一个Docker镜像作为Buildbot worker运行。然后,我们将配置Buildbot主服务器以观察GitHub存储库的更改,每次检测到新的更改时自动进行测试。
准备要学习本教程,您需要:
一个具有至少1 GB的RAM的Ubuntu16.04服务器,并包括一个可以使用sudo命令的非root 用户。
另外,在开始本教程之前需要完成以下内容:
如何在Ubuntu上安装Buildbot
安装Nginx
在Ubuntu上使用SSL来保护Nginx
给Buildbot加上SSL,使用Nginx做反向代理
搭建Docker环境
在GitHub中使用fork示例存储库在我们开始配置Buildbot之前,我们将看一下我们将用于本教程的示例存储库。
在您的Web浏览器中,访问我们将用于演示的GitHub上的hello hapi应用程序。这个应用程序是一个简单的“hello world”程序,带有一些单元和集成测试,用hapi编写的一个Node.js Web框架。
由于此示例用于演示各种持续集成系统,您可能会注意到一些文件用于为其他系统定义管道。对于Buildbot,我们将在服务器上而不是在存储库中定义构建步骤。
稍后,我们将在我们的存储库中为Buildbot设置webhook,以便更改将自动触发新测试。现在,我们需要创建自己的存储库分支。
单击屏幕右上角的Fork按钮:
GitHub fork 按钮如果您是GitHub组织的成员,可能会询问您在哪里使用fork存储库:
哪里使用fork存储库选择帐户或组织后,存储库的副本将添加到您的帐户中:
存储库的副本将添加到您的帐户您将在Buildbot配置中使用fork的URL。现在我们有了一个存储库URL,我们可以开始配置Buildbot了。
为Buildbot设置Docker我们将从设置Docker开始,以便Buildbot使用它来执行构建。首先,我们需要配置Docker和Buildbot之间的访问。之后,我们需要创建一个Docker镜像以用于我们的容器。
为Buildbot配置Docker访问
我们需要允许Buildbot和Docker在几个不同的级别进行通信。
首先,我们需要确保Buildbot进程可以访问Docker守护程序。我们可以通过将做到这一点buildbot用户的docker组:
$ sudo usermod -aG docker buildbot下次重新启动Buildbot主服务器时,这个新组将可用于Buildbot,我们稍后会这样做。
我们还需要确保Buildbot知道如何与Docker通信。由于Buildbot是用Python编写的,它利用docker-py Python包而不是直接发出Docker命令。
您可以输入以下命令安装docker-py:
$ sudo -H pip install docker-py最后,我们需要打开从容器到主机系统和外部世界的网络访问。我们可以通过在防火墙中允许docker0的接口例外来实现此目的。
通过输入以下内容允许从docker0界面访问流量:
$ sudo ufw allow in on docker0Buildbot和Docker现在应该能够有效地相互通信。
创建一个Docker镜像以用作Buildbot Worker
接下来,我们将创建一个Docker容器,用作Buildbot worker来运行我们的测试。Buildbot可以动态启动Docker容器以用作worker,但首先需要使用包含的一些Buildbot worker组件构建容器。
幸运的是,Buildbot项目提供了一个基本的Buildbot worker映像,该镜像已经配置了所有特定于Buildbot的需求。我们只需要将此镜像用作基础并安装我们项目所需的其他依赖项。
在我们的例子中,我们将使用的示例应用程序是Node.js应用程序,因此我们需要确保Node.js在镜像上可用。
要定义我们的镜像,请创建并打开Dockerfile在主目录中调用的文件:
$ nano ~/Dockerfile在这个文件中,我们使用了基于Buildbot worker的镜像FROM buildbot/buildbot-worker:master。之后,我们可以切换到root用户安装Node.js,然后切换回buildbot用户运行实际命令:
〜/ Dockerfile
FROM buildbot/buildbot-worker:master USER root RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - RUN apt-get install -y nodejs USER buildbot完成后保存并关闭文件。
一旦我们拥有了Dockerfile,我们就可以从中构建我们的镜像。我们将调用镜像npm-worker来明确我们安装的额外依赖项:
$ docker build -t npm-worker - < ~/Dockerfile