使用travis的心路历程
travis是一个持续集成的服务(Continuous Integration,简称 CI)
作用:当github有新的提交时,会触发提交的hook,然后开始自动构建,包括拉取代码,自动测试,构建任务,执行脚本等功能。
下文中以一个自动构建node任务为例,从零开始完成构建任务。
本机环境:Mac,服务器Ubuntu。
建立账号
登录网站https://www.travis-ci.org/ 用github账号登录,开启你想要持续集成的仓库。开启后则会自动监听github的事件,根据配置文件完成构建任务。
新建 .travis.yml
.travis.yml是针对于仓库的构建任务配置,放在仓库的根目录下,必要文件。
安装travis
操作如同一个普通的机器免密登录远程服务区,可以用一个已经免密登录过的机器中的密钥去登录
1 | brew install ruby |
旧版本的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 | before_install: |
在before_install下手动添加一行,处理权限问题
1 | - chmod 600 ~/.ssh/id_rsa |
上述操作的目的是:是的travis的虚拟机拥有你服务器的免密登录权限,要不然会卡在密码登录上二部进行自定义的部署过程。
1 | after_success: |
成功时候,就会在虚拟机中执行上句,免密登录到你的服务器,执行你www文件夹下的deplay.sh,deplay.sh自定义,这样就可以为所欲为了。
失败总结:
在虚拟机免密登录服务器失败:
我是因为在虚拟机中密钥默认用的名称必须是id_rsa, -out ~/.ssh/id_rsa下必须为id_rsa.
在虚拟机执行脚本中的git操作失败:
因为在服务器中git操作是没问题的,可以用本机测试ssh user@ip “sh ~/www/deploy.sh”,结果也失败,后来在服务器上的.ssh文件夹下添加config文件,填写ssh配置才成功
加密字段
1 | travis encrypt SOMEVAR=secretvalue --add |
上述–add会自动添加至配置文件中,在配置文件中可用$SOMEVAR表示你的变量。
经验:addons:ssh_known_hosts中不能用该配置,因为变量的配置在此之后。。。