持续集成: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服务器啊!至于怎么搭,且听下回分解。

python 持续集成 教程_使用Travis进行持续集成相关推荐

  1. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  2. python图形界面教程_图形教程

    python图形界面教程 众所周知,我们可以借助Java库制作游戏,这些库为我们提供制作游戏所需的图形. 因此,今天我将开始一个关于Java图形的非常新的部分. 我之前曾发表过有关如何制作所得税计算器 ...

  3. python微信使用教程_小白用Python | 十分钟Python玩微信教程

    原标题:小白用Python | 十分钟Python玩微信教程 代码放在这里:wzyonggege/python-wechat-itchat 词云那里可以换成小黄人图片 ---------------- ...

  4. python视屏教程_终于拿到了清华学霸整理出来的全套Python视频教程+项目源码+笔记...

    为什么要学习Python?机器学习?数据分析?爬虫? 在找到一本Python书啃之前,一定要问问自己为什么要学习Python? Python在这近几年里面越来越受追捧,很多的同学小伙伴都想用Pytho ...

  5. python预测实例教程_手把手教你用Python库Keras做预测(附代码)-阿里云开发者社区...

    当你在Keras中选择好最合适的深度学习模型,就可以用它在新的数据实例上做预测了.但是很多初学者不知道该怎样做好这一点,我经常能看到下面这样的问题: "我应该如何用Keras对我的模型作出预 ...

  6. python电脑下载教程_苹果电脑python下载安装教程

    这个问题我遇到过的,你把现在装的python卸了,装个32位的python就可以了,32位安装包官网上有. . 工具/原料:python.win7电脑一台方法/步骤:1.打开win7电脑,从百度搜索p ...

  7. 40天python新手入门教程_自律改变自我!努力40天轻松从入门到精通Python

    我是完全自学的,看完这条回答你就不用花钱学了.一千多的课程也就是基础课,并不会给你有多深入.如果要是学基础的话,看看下面的学习线路图以及相关的学习方法足够了.贴一个我之前自学的路径图和方法. 小白学P ...

  8. python批量命名教程_《自拍教程69》Python 批量重命名音频文件,AV专家必备!

    本篇主要学习如何Python自定义模块并调用该模块,并重点介绍Python正则表达式的强大的文本处理能力. 案例故事:任何一款终端产品只要涉及音频输出,就肯定涉及音频的解码, 作为一名专业的AV (A ...

  9. python大神教程_大神python教程415集全套,拿走不谢

    大神的教程 由北京尚学堂高淇老师亲自录制,2019Python自学教程全新升级为<Python+数据分析+机器学习>能力逐级提升,打造技能更全面的全栈工程师. Python作为一种编程语言 ...

最新文章

  1. 输入引脚时钟约束_Happy Design in Vivado 系列:时序分析入门三板斧(一):创建时钟...
  2. micropython stm32f030_STM32F0单片机快速入门六 用库操作串口(UART)原来如此简单
  3. Gitflow工作流程
  4. emqx使用webhook数据持久化到mysql
  5. 描述一下JAVA的加载过程_JVM源码分析之Java类的加载过程
  6. wordpress模板-RIPro-V2子主题V1.4-VAN主题
  7. EPSON EPL-6200 无法网络共享问题
  8. 在Vue中为什么需要组合API
  9. float在内存中是如何保存的
  10. css3波浪js特效代码
  11. 进制转换方法总结——摘自百度
  12. CyanogenMod - All the source code for CyanogenMod
  13. 关于华为产品生命周期
  14. Python工程师必备哪些技能 学习路线是什么
  15. vue前端使用jsencrypt RSA 加解密插件
  16. 程序员必备技能之Markdown
  17. 解决SQLyog连接mysql报错:Your password has expired
  18. zcmu 1603 卡斯丁狗的战舰帝国(并查集+模拟)
  19. 企业微信管理系统微盛SCRM分析
  20. 基于51单片机的俄罗斯方块小游戏proteus仿真LCD12864原理图程序设计

热门文章

  1. 用zrender制作一个基础的绘图板,绘图板可用于组态界面的基础性开发
  2. SWT的MessageBox对话框
  3. C++代码中R“(xxxxxxxxxxx)“
  4. gif背景图html,CSS按钮及gif背景图片的运用
  5. Swift 使用NSRange 查找字符多次出现的位置处理
  6. 【数据库数据恢复】linux操作系统下MYSQL数据库恢复案例
  7. 我薅了四年的国内外免费服务器
  8. PMIX ERROR: ERROR in file gds_ds12_lock_pthread.c
  9. Process finished with exit code 132 (interrupted by signal 4: SIGILL)
  10. Unity win平台 调整窗口大小强制固定比例