使用Travis进行持续集成

廖雪峰

持续集成:Continuous Integration,简称CI,意思是,在一个项目中,任何人对代码库的任何改动,都会触发CI服务器自动对项目进行构建,自动运行测试,甚至自动部署到测试环境。这样做的好处就是,随时发现问题,随时修复。因为修复问题的成本随着时间的推移而增长,越早发现,修复成本越低。

大多数软件公司对软件项目进行持续集成的重要性已经取得共识,但真正实践的还是少数。

作为开源项目,由于项目开发人员少,没有二逼产品经理的指手画脚,所以代码质量相对商业项目更好。对开源项目实施CI,会更简单。

下面我们来介绍如何为GitHub上托管的开源项目用Travis CI进行持续集成。

Travis CI是什么东东?

Travis CI是在线托管的CI服务,用Travis来进行持续集成,不需要自己搭服务器,在网页上点几下就好,用起来更方便。最重要的是,它对开源项目是免费的。

为什么是GitHub?

因为GitHub和Travis是一对好基友,不用GitHub虽然也能用Travis,但是配置起来太麻烦。而且,作为开源项目,为什么不用GitHub?

还不会git怎么办?

零基础Git教程,只能帮你到这里了!

我用了GitHub,也有开源项目,现在怎么搞CI?

首先,直接用你的GitHub账号登录Travis CI的网站:https://travis-ci.org/

第一次登录时,授权给Travis访问你的GitHub代码库,然后,把需要CI的代码库选上:

默认情况下,Travis会在代码push时收到GitHub通知,然后自动获取最新代码,进行CI。

但是我们还是需要编写一个.travis.yml文件来告诉Travis一些项目信息,比如用的Java还是Python,用的JDK 8还是JDK 6,等等。

假设我们用的Java和JDK 8,这个.travis.yml就这么写:

language: java

jdk:
- oraclejdk8

然后,放到代码库的根目录下。

Travis一看到Java项目,默认用Maven 3,然后执行两个脚本命令:

install: mvn install -DskipTests=true -Dmaven.javadoc.skip=true
script: mvn test

提交.travis.yml并push后,如果一切顺利,Travis就会自动开始构建这个Maven工程。可以在Travis上看到构建结果和详细的输出:

也可以指定构建脚本,例如:

script: mvn package

如果项目结构标准,pom.xml在根目录下,执行就会一切正常。但是,如果pom.xml在子目录下,就需要修改install脚本:

install: cd wxapi && mvn install -DskipTests=true -Dmaven.javadoc.skip=true

有一些Maven项目在package时用到了PGP密钥来签名,因为Travis的服务器不可能知道PGP密钥,所以install脚本就会失败。解决方法是加上-Dgpg.skip=true

install: cd wxapi && mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dgpg.skip=true

如果想在GitHub的项目首页显示一个高大上的build:passing标志,比如像这样:

可以在根目录的README.md中加上一个图片链接:

[![Build Status](https://travis-ci.org/michaelliao/openweixin.svg?branch=master)](https://travis-ci.org/michaelliao/openweixin)

是不是用了CI代码质量就有保证了?

这个问题的答案是。如果CI能提高代码质量,那软件公司只需要招实习生写代码外加CI就可以了,招那么贵的高级工程师浪费钱干啥?

是不是用了Travis就实现了CI?

这个问题的答案还是。CI是解决问题的手段而不是目的。问题是如何提高代码质量。我见过很多公司的项目,编译一次半小时(不是编译Linux内核那种),测试一次几个小时。不能在短时间内完成编译、测试的代码都有问题,导致CI形同虚设。这里的“短时间”是指5分钟以内。

最后一个问题:

私有项目怎么用Travis?

如果不是开源项目,能用Travis吗?免费的肯定是不能用了,但是有收费的Travis Pro,至于费用,呵呵,四个字:

贵得要命

最便宜的每月需要$129!不想花这个冤枉钱怎么办?自己搭CI服务器啊!

https://docs.travis-ci.com/user/languages/java/

使用Travis进行持续集成的更多相关文章

  1. github Travis CI 持续集成

    一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...

  2. Travis CI持续集成使用

    用好这个工具不仅可以提高效率,还能使开发流程更可靠和专业化,从而提高软件的价值.而且,它对于开源项目是免费的,不花一分钱,就能帮你做掉很多事情. 一.什么是持续集成? Travis CI 提供的是持续 ...

  3. 使用 Travis 进行持续集成

    廖雪峰教程:https://www.liaoxuefeng.com/article/0014631488240837e3633d3d180476cb684ba7c10fda6f6000

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

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

  5. Travis CI用来持续集成你的项目

    这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...

  6. 持续集成时 travis 和 codecov 等 yaml 文件的配置

    最近在项目中在配置CodeCov 以及Travis 和 AppVeyor做持续集成时,遇到了一些问题,也解决了一些问题.顺便拿来分享一下. 首先时Travis,这个主要是来跑基于 Linux 环境下的 ...

  7. 利用Travis CI+GitHub实现持续集成和自动部署

    前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...

  8. 如何持续集成/交付一个开源.NET函数库到Nuget.org

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...

  9. fir.im weekly - 「 持续集成 」实践教程合集

    我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...

随机推荐

  1. LeetCode Factorial Trailing Zeroes Python

    Factorial Trailing Zeroes Given an integer n, return the number of trailing zeroes in n!. 题目意思: n求阶乘 ...

  2. Android已有的原生Camera框架中加入自己的API的实现方案。

    版权声明:本文为CSDN博主(天才2012)原创文章.未经博主同意不得转载. https://blog.csdn.net/gzzaigcn/article/details/25707389     在 ...

  3. JS实现表单多文件上传样式美化支持选中文件后删除相关项

    http://www.youdaili.net/javascript/5903.html

  4. C# 正则表达式 判断各种字符串(如手机号)

    using System; using System.Text.RegularExpressions; namespace MetarCommonSupport { /// <summary&g ...

  5. 添加mysamba

    一. 复制/home/tingpan/openwrt/barrier_breaker/feeds/luci/applications文件夹下的luci-samba文件,将文件中的内容samba改为my ...

  6. centOS 6.5关闭防火墙步骤

    centOS 6.5关闭防火墙步骤 关闭命令:  service iptables stop         永久关闭防火墙:chkconfig iptables off 两个命令同时运行,运行完成后 ...

  7. js 取整

    1.丢弃小数部分,保留整数部分 js:parseInt(7/2)  2.向上取整,有小数就整数部分加1  js: Math.ceil(7/2)  3,四舍五入.  js: Math.round(7/2 ...

  8. WIN7 X64 下 VS2008升级补丁 (显示隐藏按钮)

    原文地址:http://blog.sina.com.cn/s/blog_57b5da120100gk7l.html 更新列表: 2010年3月26日:增加对日文版的支持. 2010年3月3日:更新代码 ...

  9. gdb 调试(查看运行时数据)(五)

    查看栈信息 当程序被停住了,首先要确认的就是程序是在哪儿被断住的.这个一般是通过查看调用栈信息来看的.在gdb中,查看调用栈的命令是backtrace,可以简写为bt. (gdb) bt    #0 ...

  10. Android Studio 默认keystore 以及自定义keystore

    我们使用Android Studio 运行或测试我们的app  它使用一个默认的debug.keystore进行签名. 这个默认签名(keystore)是不需要密码的,它的默认位置在 $HOME/.a ...