用持续集成工具Travis进行构建和部署

用持续集成工具Travis进行构建和部署

摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程。

1. 概述

持续集成(Continuous Integration)是软件开发过程中的重要环节,不论是在开发环境,还是生产环境,其好处都是可以让团队尽快得到反馈,从而尽早发现和解决问题,不要等到用户来报告问题,影响产品和团队的声誉。越早越快地发现和解决问题,成本越低,这也是敏捷开发的基本目的之一。

持续集成的工具有不少,著名的有CruiseControl、JetBrains的TeamCity、微软的Team Foundation Server。本文讲的是另外一个相对轻巧的持续集成工具Travis。这个工具的不同之处是,它已经搭建好了,有自己的环境,省去了你用自己的服务器安装、配置的麻烦。如果你的项目是开源的,只需要在https://travis-ci.org/上用Github的账号注册就可以免费使用了;如果不是开源的项目,就要收费了,要用https://travis-ci.com/,具体的收费标准可以参考https://travis-ci.com/plans。下面只讲述https://travis-ci.org/的使用和配置,因为https://travis-ci.com/我也没用过,不过估计收费的功能应该更多更好一些。

2. 选择项目

https://travis-ci.org/注册了账号之后,在Github账号下的项目会自动出现在这里,可以选择哪个项目要用Travis来做持续集成,缺省情况下所有项目都是不做持续集成的。如下图所示,

aaarticlea/png;base64,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" alt="" />

3个项目中,只有最后一个项目是要做持续集成的,其它都不做持续集成。你还可以进一步配置,一个项目中的哪个或哪几个分支要做持续集成,这在后面会讲到。

3. 配置

持续集成的配置,必须通过位于项目根目录下的.travis.yml文件来进行,完整的文档可以见附录中的参考资料[1]。

首先,要选择项目的语言。写此文时Travis支持15种编程语言,象常用的Java、C、C++、JavasScript (with Node.js)、Objective-C、PHP、Python和Ruby都在支持之列。我的docs项目是个文档项目,使用Sphinx,所以语言就选择了Python 2.7,和我的开发环境保持一致。所以,我的.travis.yml文件开始的部分是这样的:

language: python
python:
- "2.7"

其次,要安装一些相关的软件包,可以在install命令中进行安装,在安装之前必要的依赖包可以在before_install中进行,所以.travis.yml文件中相应的部分为:

# Use this to prepare the system to install prerequisites or dependencies
before_install: "sudo apt-get update" # command to install dependencies
install: "pip install -q -r requirements.txt --use-mirrors"

而要安装的包是在requirements.txt中指定的,其内容如下:

Sphinx==1.2
sphinxcontrib-phpdomain

安装的Sphinx版本为1.2,最新的Sphinx 1.3在构建的时候会碰到错误,所以用旧一些的版本。sphinxcontrib-phpdomain是用来扩展Sphinx的。

4. 构建

构建在script命令中指定。在我的这个项目中,这是最简单的,我参考的资料也是最简单的,见[2]。.travis.yml文件中相应的部分为:

# command to build
script: make html

这里执行的命令,如果返回值是0就算成功,否则就算失败,这是Unix返回值的标准。

前面提到限制项目的分支,可以作如下配置:

# whitelist
branches:
only:
- mybranch

这就是,只有mybranch这个分支要做持续集成,也可以用多行指定多个分支。

这时,就可以提交.travis.yml,并推送到Github服务器,Travis就会自动检查到这个项目的变化,自动启动一个虚拟机,来进行持续集成。

可以看到,这是一种按需、即时的方式,和自己安装、配置服务器进行持续集成的方式相比,更为节省资源,更能实现更好的效果。

5. 部署

部署稍微麻烦一些,因为要涉及到具体的服务器配置。相关的文档见参考资料[3]。

首先,Travis不支持sftp,详见考资料[4],这比较遗憾。为保证安全,我打算用ftps。

5.1 安装、配置服务器上的ftp

先要在服务器(Ubuntu 12.04)上安装、配置vsftpd,请看参考资料[7]和[8]。

但使用的是普通用户,不是超级管理员,也没有sudo的权限。要赋予该用户sudo的权限,可以把该用户加入sudo用户组。见参考资料[5]和[6],使用超级管理员root,执行如下命令:

# sudo usermod -a -G sudo myusername

这就把用户myusername加入了sudo用户组,就可以使用sudo来执行超级管理员才能的一些管理任务了,以下命令都是该普通用户执行的。

下面安装vsftpd,执行如下命令:

$ sudo apt-get install vsftpd

安装完毕后,配置vsftpd,这都是通过修改/etc/vsftpd.conf完成的。先禁止匿名用户:

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
anonymous_enable=NO

再允许服务器的本地用户(即myusername等)使用ftp:

# Uncomment this to allow local users to log in.
local_enable=YES

因为是要上传构建得到的文件到服务器,所以还要开启写入操作:

# Uncomment this to enable any form of FTP write command.
write_enable=YES

ftp使用端口21作为控制通道,供用户接入、登录、登出等交换控制信息使用。另外,还需要数据通道,传输上载、下载的数据。在主动模式下,数据通道缺省为端口20,这个我没有改。在被动模式下,需要自行设置一组端口:

# These two options set the ports for passive mode.
pasv_min_port=6789
pasv_max_port=6890

最后,需要在防火墙的设置中开启这些涉及的端口,20、21、6789-6890,这是朋友帮助做的,我也不知道具体如何操作的。

最后,可用浏览器访问ftp服务器,并上传、下载文件,验证以上配置正确。

5.2 配置Travis使用ftp部署

Travis的各个执行环节中,还有一个环节after_success,这是在script命令执行成功之后执行的。部署就是在这个环节进行的,添加如下配置到.travis.yml文件中:

after_success:
"find ./make/output -type f -exec curl --ftp-create-dirs -u $FTP_USER:$FTP_PASSWORD -T {} ftp://123.45.67.89/myproject/{} \\;"

这个命令由find找出要部署的文件,然后交给curl,上传到服务器上。其中,./make/output为构建的输出目录,123.45.67.89是服务器的IP地址,/myproject/为服务器上要部署的目录。$FTP_USER和$FTP_PASSWORD是Travis持续集成的环境变量,需要在.travis.yml文件中单独设置:

env:
global:
- "FTP_USER=myusername"
- "FTP_PASSWORD=mypassword"

到此,一个基本的包括构建和部署的Travis持续集成环境就算是配置好了。每次这个项目推送到Github库的指定分支,Travis就是自动检测到,自动进行构建,构建成功后就会自动部署到指定的服务器上。

完整的.travis.yml文件如下:

用持续集成工具Travis进行构建和部署-LMLPHP
language: python
python:
- "2.7" env:
global:
- "FTP_USER=myusername"
- "FTP_PASSWORD=mypassword" # whitelist
branches:
only:
- mybranch # Use this to prepare the system to install prerequisites or dependencies
before_install: "sudo apt-get update" # command to install dependencies
install: "pip install -q -r requirements.txt --use-mirrors" # command to build
script: make html after_success:
"find ./make/output -type f -exec curl --ftp-create-dirs -u $FTP_USER:$FTP_PASSWORD -T {} ftp://123.45.67.89/myproject/{} \\;"
用持续集成工具Travis进行构建和部署-LMLPHP

6. 结语

本文只是介绍了利用Travis进行持续集成的简单配置,还有一些问题没有说明或解决,比如:

  • ftp不够安全,是否可以使用ftps来加强安全性?
  • Travis的配置文件中,ftp的用户名和密码是明文,是可以加密的。

有兴趣的朋友,可以自己研究Travis的文档。

附录. 参考资料

  1. Travis CI Documentation
    http://docs.travis-ci.com/
  2. Have Travis-CI test your Sphinx docs
    https://coderwall.com/p/wws2uq/have-travis-ci-test-your-sphinx-docs
  3. how to deploy to own server using ftp
    http://docs.travis-ci.com/user/deployment/custom/
  4. curl: (1) Protocol sftp not supported or disabled in libcurl
    https://github.com/travis-ci/travis-ci/issues/2556
  5. How do I grant sudo privileges to an existing user? [duplicate]
    http://askubuntu.com/questions/168280/how-do-i-grant-sudo-privileges-to-an-existing-user
  6. How can I add a new user as sudoer using the command line?
    http://askubuntu.com/questions/7477/how-can-i-add-a-new-user-as-sudoer-using-the-command-line
  7. Ubuntu 12.04 » Ubuntu Server Guide » File Servers » FTP Server
    https://help.ubuntu.com/12.04/serverguide/ftp-server.html
  8. vsftpd
    https://help.ubuntu.com/community/vsftpd
 
04-30 08:34