travis是一个持续集成的服务(Continuous Integration,简称 CI)
作用:当github有新的提交时,会触发提交的hook,然后开始自动构建,包括拉取代码,自动测试,构建任务,执行脚本等功能。

下文中以一个自动构建node任务为例,从零开始完成构建任务。
本机环境:Mac,服务器Ubuntu。

建立账号

登录网站https://www.travis-ci.org/ 用github账号登录,开启你想要持续集成的仓库。开启后则会自动监听github的事件,根据配置文件完成构建任务。

新建 .travis.yml

.travis.yml是针对于仓库的构建任务配置,放在仓库的根目录下,必要文件。

安装travis

操作如同一个普通的机器免密登录远程服务区,可以用一个已经免密登录过的机器中的密钥去登录

1
2
3
4
5
6
7
brew install ruby

gem update --system

gem sources --add https://gems.ruby-china.org/

sudo gem install travis

旧版本的ruby会导致travis有些问题,故用brew安装一个新版本的ruby,brew安装略。
更新gem源,(国外的源太慢),上述操作完成后安装travis。

1
travis login

用github账号登录travis,不用担心会暴露密码,因为走得是github的api。

使travis环境免密登录travis

cd到本地代码仓库

1
travis encrypt-file ~/.ssh/id_rsa --add

若本机已经用id_rsa的密钥免密登录服务器则可重用该密钥,上述命令将密钥进行加密放在id_rsa.enc中 –add命令自动将如下注入到配置文件中

1
2
3
before_install:
- openssl aes-256-cbc -K $encrypted_1b7beeacf6f9_key -iv $encrypted_1b7beeacf6f9_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d

在before_install下手动添加一行,处理权限问题

1
- chmod 600 ~/.ssh/id_rsa

上述操作的目的是:是的travis的虚拟机拥有你服务器的免密登录权限,要不然会卡在密码登录上二部进行自定义的部署过程。

1
2
after_success:
- ssh user@ip "sh ~/www/deploy.sh"

成功时候,就会在虚拟机中执行上句,免密登录到你的服务器,执行你www文件夹下的deplay.sh,deplay.sh自定义,这样就可以为所欲为了。

失败总结:

  1. 在虚拟机免密登录服务器失败:

    我是因为在虚拟机中密钥默认用的名称必须是id_rsa, -out ~/.ssh/id_rsa下必须为id_rsa.

  2. 在虚拟机执行脚本中的git操作失败:

    因为在服务器中git操作是没问题的,可以用本机测试ssh user@ip “sh ~/www/deploy.sh”,结果也失败,后来在服务器上的.ssh文件夹下添加config文件,填写ssh配置才成功

加密字段

1
travis encrypt SOMEVAR=secretvalue --add

上述–add会自动添加至配置文件中,在配置文件中可用$SOMEVAR表示你的变量。
经验:addons:ssh_known_hosts中不能用该配置,因为变量的配置在此之后。。。