1. 前言
《Hexo配置Travis CI自动发布》一文中,我们学习了使用travis-ci构建发布hexo项目的方法。
因为项目的特殊性,所以发布时只是把代码push到了git仓库,并没有把代码发布到我们自己的服务。本文,我们就来学习一下怎样通过travis-ci,把项目发布到我们自己的服务器。
需求:
已知hexo项目部署在github,百度抓取不到github的内容,因此我们想要在自己的服务器也部署一份代码,国内的流量打到自己的服务器。实现国内流量 -> 阿里云服务器,国外流量 -> github pages。
配置 hexo-deploy ,在发布时会同时发布静态页面到 voidking.github.io 和 voidking。
阿里云服务器上有项目 /opt/nginx/work/voidking ,项目仓库为 voidking。
现在想要实现的是,当使用 hexo-deploy 之后,阿里云服务器上的代码能够自动更新。
2. 思路
给 voidking.github.io 项目配置travis-ci,当静态页面更新完成后,在阿里云服务器上执行 git pull。
中间需要解决的主要问题是: travis-ci 访问阿里云服务器的权限问题。
另外,因为 voidking.github.io 项目是线上项目,所以我们创建一个在github上和travis-ci上分别创建一个 travis-test 项目,用来测试travis-ci的配置。
3. 配置travis-ci
3.1. 服务器密钥配置
1、创建一个用户专门用来更新代码
1 | useradd -m voidking -s /bin/bash |
2、生成密钥
1 | su voidking |
执行完之后,.ssh目录下生成了 id_rsa 和 id_rsa.pub。
3、使密钥生效
1 | ALI_IP="8.136.13.58" |
3.2. 安装travis client
直接安装travis破坏服务器环境,因此最好使用Docker安装travis。
1、运行travis容器
1 | docker pull ruby:slim |
2、容器内安装travis client
1 | gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ |
3.3. travis-ci密钥配置
1、拷贝密钥到容器
1 | docker cp /home/voidking/.ssh/id_rsa travis:/tmp |
2、登录travis-ci
1 | cd /tmp |
3、对id_rsa加密,生成id_rsa.enc;同时生成服务端解密命令
1 | touch .travis.yml |
详情参考Encrypting Files。
执行完命令,会生成加密文件 id_rsa.enc,.travis.yml 中会被写入解密命令:
1 | before_install: |
并且,变量 encrypted_f217180e22ee_key
和 encrypted_f217180e22ee_iv
会填入travis-ci上travis-test项目中的环境变量配置中。
3.4. travis.yml配置
1、访问Travis CI Pro,找到 travis-test 项目,Settings,在Environment Variables一栏填入Name为GITEE_TOKEN,VALUE为gitee的access token。
2、在github上 travis-test 项目中放入 id_rsa.enc
3、在github上 travis-test 项目中创建 .travis.yml,内容为
1 | sudo: false |
4、提交代码
1 | git add . |
5、验证
打开travis voidking/travis-test ,可以看到脚本已经成功执行。
登录阿里云服务器,git log查看代码版本,确实也已经更新到了最新版。nice!
最后,同样的步骤配置到 voidking.github.io 项目上即可。
4. 配置travis-ci简化版
上面的流程,安全性较高,但是整个流程很麻烦,有没有更简单的办法?必须是有的。
方法一:安装sshpass,直接使用密码登录服务器执行命令。
方法二:把私钥作为参数配置到travis-ci,使用时写入到文件中。
本节中我们研究一下方法二的配置方法。
4.1. 服务器密钥配置
1、创建一个用户专门用来更新代码
1 | useradd -m voidking -s /bin/bash |
2、生成密钥
1 | su voidking |
执行完之后,.ssh目录下生成了 id_rsa 和 id_rsa.pub。
3、使密钥生效
1 | ALI_IP="8.136.13.58" |
4.2. travis-ci密钥配置
1、加密私钥cat .ssh/id_rsa | base64 | tr -d '\n'
2、访问Travis CI Pro,找到 travis-test 项目,Settings,Environment Variables。创建两组环境变量:
- Name为
GITEE_TOKEN
,VALUE为gitee的access token。 - Name为
ID_RSA
,VALUE为加密后的私钥。
4.3. travis.yml配置
1、在github上 travis-test 项目中创建 .travis.yml,内容为
1 | sudo: false |
2、提交代码
1 | git add . |
3、验证
打开travis voidking/travis-test ,查看脚本执行日志。
登录阿里云服务器,git log查看代码版本。