使用Travis进行持续集成
使用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中加上一个图片链接:
[](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进行持续集成的更多相关文章
- github Travis CI 持续集成
一个项目如何保证代码质量是开发中非常重要的环节,对于开源项目来说更是如此,因为开源项目要面对的是来自不同水平开发者提交的代码.所以围绕开源做持续集成(Continuous Integration)变得 ...
- Travis CI持续集成使用
用好这个工具不仅可以提高效率,还能使开发流程更可靠和专业化,从而提高软件的价值.而且,它对于开源项目是免费的,不花一分钱,就能帮你做掉很多事情. 一.什么是持续集成? Travis CI 提供的是持续 ...
- 使用 Travis 进行持续集成
廖雪峰教程:https://www.liaoxuefeng.com/article/0014631488240837e3633d3d180476cb684ba7c10fda6f6000
- 用持续集成工具Travis进行构建和部署
用持续集成工具Travis进行构建和部署 用持续集成工具Travis进行构建和部署 摘要:本文简单说明了如何使用持续集成工具Travis进行构建和部署的过程. 1. 概述 持续集成(Continuou ...
- Travis CI用来持续集成你的项目
这里持续集成基于GitHub搭建的博客为项目 工具: zqz@ubuntu:~$ node --version v4.2.6 zqz@ubuntu:~$ git --version git versi ...
- 持续集成时 travis 和 codecov 等 yaml 文件的配置
最近在项目中在配置CodeCov 以及Travis 和 AppVeyor做持续集成时,遇到了一些问题,也解决了一些问题.顺便拿来分享一下. 首先时Travis,这个主要是来跑基于 Linux 环境下的 ...
- 利用Travis CI+GitHub实现持续集成和自动部署
前言 如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错. 如果你很熟悉持续集成,一定会同意这样的观点:"使用它已经成为一种标 ...
- 如何持续集成/交付一个开源.NET函数库到Nuget.org
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:这是一个简单的入门向导,涉及到GitHub.AppVeyor和Nuget.org. 最 ...
- fir.im weekly - 「 持续集成 」实践教程合集
我们常看到许多团队和开发者分享他们的持续集成实践经验,本期 fir.im Weekly 收集了 iOS,Android,PHP ,NodeJS 等项目搭建持续集成的实践,以及一些国内外公司的内部持续集 ...
随机推荐
- 将string str中的str转换成字符数组
#include <iostream> #include <map> #include <string.h> using namespace std; int ma ...
- stenciljs 学习八 组件测试
测试对于框架来说比较重要,对于web 组件的测试同样很重要,类似的jest 很方便,stenciljs也是基于jest 开发的 包含两个核心api render(), flush() 测试配置 pac ...
- 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
请求因 HTTP 状态 401 失败: Unauthorized 今天在调用webserver时出现了上述标题的错误,开始认为是由于端口的问题,我把端口恢复80默认端口后,但是问题并没有解决!后来我自 ...
- 标 题: 有什么办法快速把pc上的网址发送到手机上
标 题: 有什么办法快速把pc上的网址发送到手机上 transfer2u, pushbullet都可以实现你说的功能,还可以把图片或者选中内容/剪贴板内容发送到手机.后者功能更强,还支持在电脑之间发 ...
- java 的关键字 native
native native 关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中.Java语言本身不能对操作系统底层进行访问和操作,但是可 ...
- Jenkins进阶-发布后自动创建git tag(5)
为了便于项目中对发布的版本进行回滚,所以我们每次发布完成以后自动创建git tag. 1,创建一个Jenkins任务,命名成为push_tag_demo: 2,配置<源码管理>,这里配置比 ...
- jp@gc - Stepping Thread Group 字段说明
1. 安装好插件 参考文档“扩展Jmeter插件获取更多监听器” 2. 添加线程组 右键测试计划->添加->Threads(Users)->jp@gc - Stepping ...
- Jsp Cookie
cookie它是用户访问Web服务器时,服务器在用户硬盘上存放的信息. 1.使用Servlet实现cookie @WebServlet("/CookieServlet") publ ...
- Mac 平台安装 Android Studio 集成 Android SDK
最近写个小工具,给周边一些朋友用用(类似任务执行),一开始 任务执行用Python写的,部署在云端,有一些局限(资金开销):现准备写一个任务端,需要用到的人直接装个客户端就行,于是准备写个客户端版本的 ...
- SQL Server-- 存储过程中错误处理
一.存储过程中使用事务的简单语法 在存储过程中使用事务时非常重要的,使用数据可以保持数据的关联完整性,在Sql server存储过程中使用事务也很简单,用一个例子来说明它的语法格式: Create P ...