Subscribe最新博客 (更多)

06 Mar 2012

Travis CI会替代Jenkins吗?

介绍

你可能用Github了。但是你是怎么自动构建你的开源项目的呢?你的Github项目有“构建状态”标签吗?

Github上的项目构建状态

如果你还不知道这个,你就有些落伍了,因为这是Travis CI带来的持续集成的革新,它可能会替代Jenkins现在的地位。

让我们一起来看看Travis-ci到底带来了什么,先从Jenkins说起。

在写这篇博客时,发现好友晓斌也写了一篇Travis CI,翩翩而至的CI云,可以参考阅读。

Jenkins介绍

持续集成是敏捷软件开发的一个重要工具,开源工具Jenkins是实施持续集成首选,大概占据了半壁江山。

Jenkins界面

Jenkins以前叫Hudson,后来由于Oracle收购了Sun公司,Oracle与开源软件社区谈崩了。Hudson创始人Kohsuke Kawaguchi(简称 KK)一怒之下,和社区的人其他人重起炉灶,建立了Jenkins社区。详细可以看看InfoQ的文章Hudson社区提议将项目更名为Jenkins

Jenkins功能

它有很多极佳的特性:

  1. 易于安装:一个命令就可启动,也方便部署到各种Web容器中(如tomcat)。
  2. 易于配置:所有的配置都在Web界面实现,权限控制得也不错。
  3. 插件支持:基本上所有的扩展都是有插件完成的,开发插件也很方便,由此产生了庞大的社区。
  4. 支持分布式构建:Jenkins能够让通过主从模式(master/slave)多台机器一起构建。

Jenkins在企业中常见步骤

Jenkins服务器一般先架设在一台服务器上,有配置管理人员管理。

产品有构建需求后,配置管理人员就新建一个任务,配好源码仓库,设置构建时间,指定运行脚本来编译测试产品,并且设置报告输出。一切都可以在Web界面中运行。

Jenkins的一些弊端

Jenkins虽然非常好用,但还是有些弊端。

多平台或依赖的包

如果你的软件想在不同的操作系统软件构建并验​​证,这将是相当有难度和技巧性,一般主要是准备不同的操作系统的机器,然后使用主/从模式进行分布式构建。

在C++中你可以使用有关的交叉编译器,一个不错的解决方案。

但是再进一步如果你的第三方软件和不同的依赖比较多,那么这个环境的准备是非常困难的,因为这个组合将很大。

当然你可有使用虚拟机的技术vagrant/virtualbox,参见使用vagrant+jenkins来管理虚拟机的技巧。可以工作,不太优雅。因为它不是原生的,有点复杂。

配置管理人员的工作

一般来说Jenkins的构建任务,它是集中控制的。大多来说都是有专职的配置管理人员来管理,否者权限会混乱。

当有需求时,他们负责在CI服务器创建任务(记住:这些配置文件不是有版本控制的)。这个就涉及到了沟通成本,你有变化需求,很难及时满足。

由于服务器是有限的,它主要构建重要分支的内容。在你自己的私有分支上运行CI是比较奢侈的,而且环境不一样,也不推荐。

你可以想象如果在一个C/C++产品的公司,你要为一个Lisp的项目创建CI要花多久?

作为开发者,为什么不能随时构建你想要的东西呢?这就是Travis CI想做的。

Travis CI 介绍

Travis CI 这里就不介绍怎么使用了具体可以先看晓斌的博客免费的持续集成测试服务,强烈建议你先试一下。

初看Travis CI象和Jenkins没啥区别,指定你Github中的项目,然后他帮你编译,而且它使用的也是Vagrant/Virtualbox技术。但实际上里面有很多好点子。

Travis CI带来的变革

配置本地化和可读性

不像以前,构建的任务是在Jenkins服务器上的,现在构建的配置文件直接就和源码放在一起,而且配置文件使用DSL写的,可读性更高。

before_script:
  - sudo apt-get install pandoc
  - sudo apt-get install ttf-arphic-gbsn00lp ttf-arphic-ukai ttf-wqy-microhei ttf-wqy-zenhei
  - sudo apt-get install texlive-xetex texlive-latex-recommended texlive-latex-extra
  - gem install mkbok

rvm:
  - 1.9.3
  - 1.8.7
script: mkbok --lang zh --build pdf

after_script: 
    - which curl ; curl -v --upload-file sdcamp.zh.pdf http://blobs.ge.tt/3iBcNNC/sdcamp.zh.pdf?sig=-TY5O1GAx8xHwWiCqd8aySlQiroFAnHK2o4

作为用户,关心的是要哪些依赖包,然后怎么构建就行了,上面的配置每一行都没有浪费。

多版本支持

像上面的例子中,我要求在两个Ruby环境中运行,它就帮我做到了,我并不关心它是怎么切换的。

多版本构建结果

原生的云技术来分布式构建

Travis CI使用的Ruby语言,一开始考虑的就是分布式构建,比Jenkins的插件式进了一步。

虽然Travis CI并不是直接用到了云机器,它的虚拟机部分只是Vagrant/Virtualbox,但是这一块是很容易迁移到其他的技术的。

总结

Jenkins有点可惜,改了名字以后,功能上面并没有突破。当然这就是开源竞争的好处,总有新的理念,新的工具产生。你不前进,别人就迎头赶上。

Travis CI现在只是支持Github的公开项目,但已经爆发出它的优点了。要不了多久,我相信就能运行在你公司内部了。

让我们一起期待这个革新吧!

相关阅读

  1. Juven Xu的“Travis CI,翩翩而至的CI云” http://www.juvenxu.com/2012/03/06/travis-ci/
  2. 免费的持续集成测试服务 http://saberma.me/other/2011/11/29/travis-ci-is-a-free-continuous-integration-test-server.html
View Comments
13 Jan 2012

开源书和开源技术-PDF中蛋疼的中文字体

介绍

上次我介绍了一个用Markdown格式来写开源书和相关的开源技术,还留了个在Linux下产生PDF所需要的中文字体这个大尾巴。这次我想借用我写【跟我学企业敏捷开发】的一点经验,给不太了解这一块知识的朋友一起探讨一下。

有些问题还是没有解决,希望有Latex的高手解答。

不管怎样,还是希望能借此机会推动国内电子书,特别是开源电子书的发展。

Linux下的中文编码和字体

首先,我用的是Linux环境并且选用的是UTF-8的编码,而不是GBK,否者在github上显示会有问题,不了解这方面的朋友自己找找资料吧,够讲个把小时的。

在产生PDF时,一般建议内嵌中文字体的,但是真正能用的中文字体实际很少,极大多数是有版权的:

  • 文鼎开放的四套字体(简报宋、细上海宋、简中楷、中楷),没有一点版权问题,是大部分的中文Linux的缺省安装。
  • 文泉驿的几套字体(微米黑、正黑、点阵宋体)是开放但是GPL性质的,所以不是随便可以商用的。
  • Adobe有两套开放字体(宋体、黑体)我认为是可以随便用的,忘了在哪里看到这个解释的了。

可以看看Ubuntu免费中文字体的介绍有个认识。

怎么选择对应字体

一般缺省中文正文字体是宋体、细明体,对应英文Serif类的英文字体:Georgia、Times New Roman等。

标题和重要内容可以选楷体和黑体,对应英文Sans Serif类的英文字体:Arial、Tahoma、Verdana等

技术文章中常见的代码典型的等宽体用黑体,对应英文Monospace类的英文字体:Courier New等

所以对应的在我的中文Latex配置中可选的是:

  • font:文鼎的简报宋、细上海宋,文泉驿的点阵宋体,Adobe的宋体
  • bold: 文鼎的简中楷、中楷,文泉驿的微米黑、正黑,Adobe的黑体
  • mono: 文泉驿的微米黑、正黑,Adobe的黑体

如何安装字体

我用的试验环境是Ubuntu 11.04 (Natty),大部分可以直接从Ubuntu源中下载了。

你可以用命令fc-list :lang=zh-cn查看安装好的中文字体,结果中前半部分就是字体名称(如AR PL UMing CN)。

user@puppet1:~$ fc-list :lang=zh-cn | grep CN
AR PL UMing CN:style=Light
AR PL UKai CN:style=Book

文鼎开放的四套字体的Ubuntu包、字体名字和名称如下:

ttf-arphic-gbsn00lp      "AR PL SungtiL GB" 文鼎PL简报宋
ttf-arphic-gkai00mp      "AR PL KaitiM GB" 文鼎PL简中楷
ttf-arphic-ukai          "AR PL UKai" 文鼎PL中楷
ttf-arphic-uming         "AR PL UMing" 文鼎PL细上海宋

文泉驿字体的Ubuntu包、字体名字和名称如下

ttf-wqy-microhei   "WenQuanYi Micro Hei" 文泉驿的微米黑
ttf-wqy-zenhei     "WenQuanYi Zen Hei" 文泉驿的正黑
xfonts-wqy         "WenQuanYi Bitmap Song" 文泉驿的点阵宋体

Adobe的中文字体有官方下载

$ tar -jzxf FontPack910_chs_i486-linux.tar.bz2
$ tar -xvf CHSKIT/LANGCHS.TAR
$ mkdir ~/.fonts 
$ cp Adobe/Reader9/Resource/CIDFont/*.otf ~/.fonts
$ fc-cache -f -v
$ fc-list :lang=zh | grep Adobe

蛋疼的问题

只可惜现在正文在产生PDF时没有一种字体是有完美表现的。

  1. 文鼎贡献的字体中台湾字形的细上海宋的句号在中间,出来的效果不伦不类的。
  2. 文鼎贡献的字体中大陆字形的简中楷和简报宋,标点符号的位置是对的,但是当碰到条目(Item)的时候条目的点没能显示出来。
  3. Adobe的宋体,条目的时候显示一个田子框,很难看。
  4. 文泉驿的点阵宋体老是转化Latex时出错,搞不定。

现在将就着用文鼎的细上海宋。

【更新】 2、3 条目的问题,我hack成其他字符(*)显示就没问题了(如下),不知道缺省的圆点显示不对。http://wiki.ctex.org/index.php/LaTeX/%E5%88%97%E8%A1%A8,现在就用文鼎的细上海宋了。

\begin{itemize}\setlength{\itemsep}{1pt}\setlength{\parskip}{0pt}\setlength{\parsep}{0pt}
\item[*]
% 原来是
% \item

其他

本文也是我用git记录在github上的,你可以看到每次的变化。

如果对此文有兴趣,帮忙顶一下,别忘了 @larrycaiyu

参考

  1. 中文字体没有版权问题的解决方案?http://bbs.ctex.org/viewthread.php?tid=46106&extra=&page=1
View Comments
31 Dec 2011

开源书和开源技术-Markdown篇

开源书和开源技术-Markdown篇

背景

看到霍泰稳关于infoq的架构师电子书问题的微博和图灵社区的文章为什么写作自由书籍?,我就想通过一个用Markdown格式写的Pro Git开源书 的例子来介绍其中用到的技术。希望能借此机会推动国内电子书,特别是开源电子书的发展。

【声明】我并没有写书的经历,这里只是对电子书出版技术的入门介绍而已。

从Pro Git说起

如果你了解Git,或者想了解Git。那么你就应该知道Pro Git,它是Git的书中写得最好的一本(至少是之一),可是你是否知道它有网络中文版,而且能在iPad上极其漂亮得阅读。并且是免费的,不是盗版的免费!如果你想要最新的,你甚至可以自己生成它。哈哈,我就是这么干的。

这一切就归功于开源社区和它后面用到的技术。

开源书

这里我不用多讲,开源书就像其他的开源产品(如维基百科)一样,只要是开放的,社区就有人会贡献。Pro Git的作者Scott很慷慨得把书的内容全部共享在github/progit库中,使用得是CC BY-NC-SA 3.0

Scott只负责英文版,其他许许多多语言的翻译都是社区贡献的,中国翻译相当有质量,你可以在线读Pro Git中文版

开源技术生成电子书

这本书不仅仅开源了内容,使用的技术也是开源的。让我们看看他是怎么做的。

markdown原始文件

首先书的内容是用markdown格式写的。markdown格式的普及要归功于GithubStackOverflow。因为它们越来越流行,它们支持markdown格式也越来越流行。这里要赞一个的是,国内的图灵社区也支持markdown,用起来超级方便。

简单来说,markdown格式的文件看着像一般的文本文件,里面只是加了很少的格式标记,因此看文本文件也不影响理解,这种格式也有很多工具帮你去转化,而且很容自动化解决。并且这些技术大多数是开源或免费的。

你可以直接看一下【Pro Git】的“第一章 介绍” 的markdown原始文件,顺便看看github自动生成的简单“第一章 介绍” 的html

产生电子书

epub/mobi格式

Ruby的rdiscount帮你从markdown转成html格式,然后有Calibre附带的命令ebook-convert生成最终的.mobi (Kindle) 和 .epub (iPad)。

PDF格式

为了能达到出版的质量,Latex是一个常用的格式,PDF也能很容易的产生出来,有关Latex,自己看看参考链接学习吧。

pandoc能帮着从markdown转换出latex格式,然后TexLive软件中的xelatex再转成PDF格式。

试验环境

你只需要一台Linux机器(虚拟机就可以了)和简单的Linux命令就可以试验了。有git和ruby的知识那就更方便了。

我用的试验环境是Ubuntu 11.04 (Natty)

下载Pro Git开源书

很简单,git clone一下就可以了,下载它的源文件包我觉得还是烦了点。

$ git clone https://github.com/progit/progit.git

epub/mobi格式

做电子书相对简单一点,因为要求没有PDF的高,calibre就可以满足了。

如果装的Ubuntu是服务器版的(没有X-Windows),建议安装xvfb无头(headless)X服务器,因为不知道什么原因有几个命令需要。XMing还不行,因为需要X-Input

$ sudo apt-get install ruby rubygems # ruby 1.8.7 is used
$ sudo apt-get install calibre # calibre 0.7.44 for ubuntu 11.04
$ gem install rdiscount ruby-debug 
$ xvfb-run ./makeebooks zh  # 缺省.mobi格式
$ export FORMAT=epub
$ xvfb-run ./makeebooks zh # .epub格式

PDF格式

生成PDF是一个比较复杂的东西,pandoc用Ubuntu库里的,TexLive建议下载最新的TexLive包安装,并配置到搜索路径中。

$ sudo apt-get install pandoc 
$ # 安装texlive 2011

因为是中文PDF,需要把字体嵌入在文件中,因此需要安装字体文件(如果不是Ubuntu中文版)

$ sudo apt-get install language-support-fonts-zh-hans

现在你就可以生成pdf文件了。

$ ./makepdfs zh 

其他常用的格式

计算机类图书对格式要求不是很多,图文、章节、源代码基本就够了,就算有些复杂公式,也可用图来显示。这也从理论上说明,它不需要复杂的格式。现在对这类技术书出版我的理解主要有几种:

  1. Microsoft的Word格式,虽然国内出版界如日中天,缺省就认它(对技术没追求,鄙视)。简单好学,但是不擅长自动化,是开源的死敌。
  2. Latex格式(就是Donald E. Knuth(高德纳)发明的,这是很棒的东西,特别适合学术类的各种复杂的公式等,不过学习曲线很高,国内也只有几家学术期刊使用。
  3. docbook格式是最有名的(从SGML演化过来?),Orielly和Pragmatic出版社缺省就用它,它能 很方便的转化出出版要的各种样式。如Jenkins - the definition guide开源书就是采用docbook。但由于是XML格式,很多人不习惯,而且多人网上协作不是很方便。
  4. 通过蒋鑫的Got Github开源书,我也了解reStructureText也是和markdown差不多纯文本(plain text)的,也是蛮流行的。

如果有机会,我再介绍一下docbook和reStructureText的相关技术。

其他

本文也是我用git记录在github上的,你可以看到每次的变化。

如果对此文有兴趣,帮忙顶一下,别忘了 @larrycaiyu

Latex的参考

  1. http://share.chinatex.org/
  2. http://manual.calibre-ebook.com/conversion.html
  3. http://calibre-ebook.com/download_linux
  4. http://johnmacfarlane.net/pandoc/
  5. http://latex.yo2.cn/articles/latex-introduction0.html
  6. http://product.china-pub.com/54569
View Comments

联系方式

Open Source

doxia-module-markdown

markdown plugin for maven site

astyleclipse

astyle c++ format plugin for eclipse 3.1 (doesn't works now)

redmine-plugin (forked)

redmine plugin inside jenkins to connect with redmine