频道栏目
首页 > 程序开发 > 软件开发 > 其他 > 正文
用持续集成工具Travis进行构建和部署
2014-11-29 08:50:08      个评论      
收藏   我要投稿
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来做持续集成,缺省情况下所有项目都是不做持续集成的。如下图所示,

 

 

 

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

 

3. 配置

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

 

首先,要选择项目的语言。写此文时Travis支持15种编程语言,象常用的Java、C、C++、JavasScript (with Node.js)、Objective-C、PHPPython和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文件如下:

 

复制代码

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/{} \\;"

复制代码

点击复制链接 与好友分享!回本站首页
相关TAG标签 工具
上一篇:FileDescriptor
下一篇:Guava - EventBus(事件总线)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站