本文介绍GitHub与Travis CI的CI功能。GitHub仓库地址:https://github.com/latelee/ci,Travis CI项目地址:https://travis-ci.org/latelee/ci/。
一、介绍
GitHub的官网是https://github.com/,在官网右上角点击Sign Up
进入注册页面,输入用户名、邮箱地址、密码,创建账户之后,GitHub会发邮件到注册邮箱,点击验证即可完成注册。一般地,我们使用https://github.com/<用户账号>
的形式访问某人或某团队的GitHub主页,如笔者的主页为:https://github.com/latelee。在主页可看到公开的信息和仓库。
与GitHub配套使用比较多的CI系统是Travis CI,其官网是https://travis-ci.org/,在首页点击Sign Up
进入注册页面,如果没有登陆过GitHub账号,则会提示登陆,如果已登陆GitHub,会直接提示授权登陆。授权之后即可登陆,后面无须授权即可直接登陆。从这里可以看到,Travis CI只支持GitHub。但是,GitHub还有其它的CI系统的支持,后续文章将会介绍。图1是授权登陆的示例(笔者使用小号来演示)。
GitHub现在访问相对比较稳定,但Travis CI有时访问比较慢,要有一定耐心。
GitHub与Travis CI的配合使用需要在两者进行一些必要的设置,功能确定的前提下,一旦配置完成,后续都不需要再改动。只需要将文件提交到GitHub仓库即可。
二、私有仓库的CI
今年年初(2019年1月),GitHub的私有仓库免费开放,虽然最多只能添加三个协同开发者,但对于小型开发团队或个人而言,已经足够了。
自然地,我们会将部分不便公开的项目使用私有仓库存储。与此相应的,Travis CI也有相应的版本。
Travis CI有社区版,即前文介绍的版本,地址是:https://travis-ci.org/,面向的公开的仓库。也有企业版,地址是:https://travis-ci.com/,是收费的,针对私有仓库。两者的使用没有差异,只是关联的仓库性质不同而已。官网的收费计划中有一段话:
Your first 100 builds are free! No credit card required.
前100个构建(即100个私有仓库)是免费的,大家可以尝试一下。(注:笔者使用一个私有仓库构建了100多次,依然能正常,故而猜测不是100次构建操作,而是100个仓库,但此未经证实)
更新:笔者使用多个仓库进行构建实验,一个构建了156次,另外分别有构建27次、18次、17次的仓库,此时无法继续构建,提示You have 0 trial builds left
。需要购买方可继续。
三、GitHub仓库
GitHub仓库一级目录下必须存在名为.travis.yml
的脚本文件,该名称固定。脚本内容自定义,大体模板如下:
1 | // 1. 配置项,如指定服务、指定编译语言等,因功能不同而不同 |
下文将使用几个小实例演示.travis.yml
的用法。本文以笔者的GitHub账号latelee
为例进行说明。
四、Travis CI
登陆Travis CI后,界面如图2所示。
左上方可点击Sync account
手动同步GitHub仓库,右侧的Repositories
是仓库列表,以字母排序。Settings
是设置页面,默认已经开启电子邮件通知,会将构建的结果发送GitHub注册邮箱中。
4.1 关联GitHub项目
如果GitHub项目较多,可以输入关键字查找。如图3所示。
点击灰色椭圆形按钮开启关联。开启后效果如图4所示。
4.2 设置
点击Setting
可进行设置页面。在初始阶段,保留默认设置即可。如图5所示。
其中Current
表示当前(或最近一次)构建的情况,Branches
是构建的分支,Build History
是构建历史,Pull Requests
是由Pull Requests
触发的构建记录。
图5中右上方More options
中点击Setting
再次进入设置页面,Trigger build
可进行一次手动构建。
4.3 环境变量
.travis.yml
脚本是跟随源码的,实际应用中,可能会出现类似账号、密钥等敏感信息,而这些信息不希望他人看到——特别是在开源项目中,此时,就可以使用环境变量来解决,图5中Environment Variables
就是环境变量的设置,其中,NAME
为环境变量名,VALUE
为其真实内容,点击Add
即可添加,注意,不能点击DISPLAY VALUE IN BUILD LOG
,否则环境变量的值会显示出来,失去其意义。环境变量的内容就不会再显示出来,所以要牢记,环境可以任意添加、删除。注意,环境变量如果有特殊字符(如!
、&
等),需要用\
反转义,否则不生效。设置好后,可以直接在.travis.yml
脚本中使用变量名称,而无须使用明文。图6是添加环境变量name
及添加后的图示。
五、几个实例
Travis CI在某个程度上可以认为是一个Linux系统,上面已经安装了许多工具供我们使用,如果遇到一些没有的工具,则可以自行安装。 本小节通过几个小实例来演示一下,注意,这里假设已经创建好GitHub仓库,并在Travis CI上关联了仓库。详细请参考https://github.com/latelee/ci。
5.1 Travis CI系统信息
.travis.yml
脚本内容如下:
1 | sudo: required |
用git客户端提交到GitHub后,稍等片刻,Travis CI将会进行构建,构建成功如图7所示。
同时会收到邮件通知,如图8所示。
如果构建失败,会出现error
提示,同时发邮件通知失败,如图9所示(从构建编号看出,是图7构建成功之前的)。
构建日志如图10所示。
下面简单分析一下,具体可参考Travis CI的构建结果页面。
1、准备好构建的系统环境,在Worker information
查看主机名称、版本。可以理解为Travis CI
为此次构建分配了一台主机。详情不需要研究太深。
2、在Build system information
可查看各种版本信息。如果仔细查阅,可以发现安装了大量工具,也配置了大量环境变量。
3、克隆GitHub关联的仓库到目录/home/travis/build/<用户名>
:git clone --depth=50 --branch=master https://github.com/[secure]/ci.git [secure]/ci
。注意,用户名被[secure]
保护起来了。
4、导出Travis CI的环境变量:export name=[secure]
,导出.travis.yml
脚本的环境变量:export PASSWD=pw123456
。注意,前者是Travis CI页面设置的环境变量,内容不可见,后者是.travis.yml
设置的,内容可见。
5、从uname -a
结果看到,使用的系统是ubuntu 14.04
,64位。
6、脚本最后输入设置的环境变量:
1 | $ echo "my env " $PASSWD |
这里再次验证这两者的可见性。所以,Travis CI页面设置的环境变量十分安全,在页面上不会显示出来。当然,这里显示的环境变量并没有实际的意义,后续文章中,我们将真正使用。
5.2 C语言编译
下面是C语言编译的.travis.yml
脚本内容:
1 | language: c |
如果将编译行为改由脚本build.sh
,则.travis.yml
内容如下:
1 | git: |
注意,Travis CI系统下载的git仓库,可能因为各种原因,脚本文件、可执行文件没有了可执行属性(x
),因此需要显式加上,否则会提示权限不足。这里的build.sh
脚本里可以使用Makefile
来编译。
5.3 docker镜像构建
下面是构建一个docker镜像的.travis.yml
脚本内容:
1 | git: |
功能比较简单,就是调用docker
命令构建Docker镜像。关于镜像的功能和内容,此时不需要了解太多,只需知道:我们可以在CI系统调用docker build
来构建Docker镜像。在后面会介绍如何利用Docker Hub自动构建镜像,方式比CI系统构建方便很多。
六、小结
本文较详细介绍了Travis CI的使用,并给出几个小实例,通过本文,我们了解到,Travis CI能完美与GitHub结合,为达各种各样的目的,需要编写不同的.travis.yml
脚本,这个脚本内容是千变万化的,可以参考GitHub优秀的项目,也可以参考附录的资源列表。
七、附录
资源列表:
本文产生的代码仓库在这里,标签为cicd_travis
。
.travis.yml配置官方说明
Travis CI收费计划
说明1:.travis.yml
文件以点号.
开头,Windows系统可能无法创建,建议在git bash
命令行用touch
创建。笔者在Win10系统中可以正常创建。
说明2:yml
文件对缩进有严格要求,层次必须排序整齐,如顶格与顶格是同一层,缩进2格与缩进2格是同一层,等等。请使用空格键,不建议用Tab键。