使用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. test20180902 day1

    试题限制均为256MB,1Sec 总分:250 试题一 谜题 首先请解以下谜题:车下的数字是什么? 正确的答案是 87 .这道题对小龙大犇来说太轻松了,于是他想加强难度来考考你:对于给定的长度 N,能 ...

  2. Oracle connect resource权限

    connect resource权限:grant connect,resource to user;后用户包括的权限:CONNECT角色: --是授予最终用户的典型权利,最基本的ALTER SESSI ...

  3. No result defined for action com.nynt.action.ManageAction and result input问题

    No result defined for action com.nynt.action.ManageAction and result input 问题原因: 1). 在action类中定义的一个r ...

  4. leetcode -day28 Unique Binary Search Trees I II

    1.  Unique Binary Search Trees II Given n, generate all structurally unique BST's (binary search t ...

  5. 利用阿里巴巴封装的FastJSON来解析json并转换成map

    利用阿里巴巴封装的FastJSON来解析json并转换成map   package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...

  6. FastAdmin 插件刷新缓存出现 200 红色提示框解决 always_populate_raw_post_data

    使用 phpStudy 全新安装了 FastAdmin,PHP 版本是 5.6. 安装完成后在刷新插件缓存时出现红色 提示消息,但状态 为 200. 打开 F12 看,发现有以下信息. <br ...

  7. Apache Spark 内存管理详解

    在spark里面,内存管理有两块组成,一部分是JVM的堆内内存(on-heap memory),这部分内存是通过spark dirver参数executor-memory以及spark.executo ...

  8. winform datagridview 不显示默认第一列 不显示未绑定列 数据源发生改变时自动更新 (转)

    不显示带星号的第一列: datagridview属性框中将 RowHeadersVisiber 设置为  false 不显示未绑定列: datagridview有一个属性是 AutoGenerateC ...

  9. 全局 SqlConnection

    class SqlHelper { public static SqlConnection conn; public static SqlConnection Open(string connStr) ...

  10. apache 服务器在ubuntu上图片无法显示解决

    很简单的一段代码实例: <!DOCTYPE html> <html> <body> <h2>Welcome here!</h2> <i ...