使用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. elastic search 日期为string类型导致视图无法展示时间的解决办法

    尝试将结构化的json数据发送到es(elastic search)上,然后创建视图,这样就能以小时维度查看数据,直接使用post发送到es后,创建索引,结果提示 没有date类型的字段(field) ...

  2. leetcode:Same Tree【Python版】

    1.p或q为None的情况用开始的两个if语句进行判断: 2.类中递归调用函数需要使用self进行调用: 3.代码很简洁,最后几行通过同时为None和同时非None的条件进行判断: # Definit ...

  3. graphql 数据导入工具

    graphql 是比 比较方便的工具,但是数据导入也是一个比较重要的工具类似prisma 包含一个seed 的功能,类似docker我们使用mysql 数据库的initdb.d,但是那个基本上就 是添 ...

  4. PowerCollections

    Wintellect 的Power collections 库 BigList<String> str = new BigList<String>(); str.Add(&qu ...

  5. window.open()与window.showModalDialog

    弹出窗口两种方式:    1.window.showModalDialog:      var feature = "dialogWidth:615px;dialogHeight:505px ...

  6. RAC7——vip的理解

    VIP特点: 1 VIP是在clusterware安装最后阶段,通过脚本VIPCA创建的: 2 VIP作为一个Nodeapps类型的CRS Resource注册到OCR中,并由CRS维护状态: 3 V ...

  7. echarts 知识点

    echarts map 禁止放大缩小,设置 calculable 为 false 即可. calculable: false echarts 报错: There is a chart instance ...

  8. Tomcat 自动化部署

    Tomcat 自动化部署脚本 使用方法: ./autodeploy.sh test 其中autodeploy.sh 为脚本的文件名, test为war的文件名. #!/bin/sh now=`date ...

  9. GIS(地理信息系统)

    ylbtech-杂项:GIS(地理信息系统) 地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统 ...

  10. 正则的使用及replace细讲

    1.var reg=/./ 与 var reg=/\./的区别? .代表任意一个字符 \.而后者代表这个字符串中得有一个. 2.?的使用 如果单独的一个字符后面带? /\d?/ 代表1个或0个这个字符 ...