travis的配置和使用参考:http://dmego.me/2017/10/13/deylpoy-hexo-with-TravisCI.html
增加同步推送到gitee
gitee也有令牌,但是gitee的令牌暂时不支持像github的token那样有推送代码的权限,gitee的推送有两种方式:
- 通过https协议使用用户名、密码推送
https://用户名:密码@gitee.com/用户/仓库名.git
- 通过ssh协议,使用私钥文件免密推送
git @ gitee.com/用户/仓库名.git
由于代码都是公开的,不能把密码和ssh私钥直接放到代码里,两种方式都需要通过trasiv提供的加密服务,对密码或者私钥文件进行加密。下面是加密和配置的流程:
登录trasiv命令行
trasiv命令行需要ruby环境,建议在linux环境操作,先安装ruby和ruby的gem。
1 | # 安装travis命令行 |
在window环境操作一直报ssl证书错误(网上有解决办法,我没有试),我是在阿里云的服务器上完成的加密。
登录travis的命令行,中间会让输入github的用户名、密码登录travis
1 | travis login #登录命令 |
加密密码
加密可以参考travis官网的文档https://docs.travis-ci.com/user/encrypting-files/
如果密码中有特殊符号,需要转义:例如@需要转成%40
首先从github的仓库clone一份代码到本地,确保根目录有.travis.yml
文件,下面的命令都是在代码的根目录操作的。
1 | # gitee_password变量名,xxx是gitee的用户名密码 |
.travis.yml
文件的globar
会增加一个密文secure
字段
修改.travis.yml
文件,增加推送gitee的代码
1 | # GE_REF和GH_REF一样是gitee要推送的仓库地址 gitee.com/用户/仓库名.git |
把修改后的.travis.yml
文件推送到github服务器上就可以了。
加密ssh私钥文件
也需要先登录trasiv的命令行
公钥、私钥文件的生成和使用参考gitee帮助文档
1 | # 例如私钥文件是 ~/.ssh目录下的id_rsa |
.travis.yml
文件会增加几行配置信息
1 | before_install: |
同时根目录会增加一个加密后的文件id_rsa.enc
.travis.yml
文件增加推送到gitee的代码
1 | # GE_REF的配置是 gitee.com:用户名/仓库名.git |
把修改后的.travis.yml
文件和新增的id_rsa.enc
文件推送到服务器。
这个我测试的时候报错
1 | $ openssl aes-256-cbc -K $encrypted_cdd288e44784_key -iv $encrypted_cdd288e44784_iv -in id_rsa.enc -out ~\/.ssh/id_rsa -d |
这种方式应该是可行的,目前暂时没有时间研究这个问题,后续再解决。
解决ssh密钥push代码报错
travis encrypt-file ~/.ssh/id_rsa --add
命令增加的代码,把-out ~后面的转义符去掉,修改为
1 | before_install: |
提交代码后重新测试,执行到git push的时候会提示无法确认gitee.com的真实性,需要用户输入yes
确认,但是travis不是交互式的,不接收输入。
1 | The authenticity of host 'gitee.com (120.55.226.24)' can't be established. |
解决这个问题的方法参考travis文档: https://docs.travis-ci.com/user/ssh-known-hosts/
有两种方法:
在
.travis.yml
配置文件中增加下面的配置1
2
3addons:
ssh_known_hosts:
- gitee.com在
.travis.yml
配置文件中把gitee.com
服务器ssh
的公钥写到known_hosts
文件中1
- echo 'Key' >> $HOME/.ssh/known_hosts
把key替换成gitee.com
的公钥,key的获取方法参考上面的travis文档的链接。
至此使用travis同时向github和gitee推送代码的问题已经解决,同时还可以增加自己其他的服务器。
部署中遇到的其他问题
- travis部署的页面是空页面
hexo g
的时候报错1
2
3
4
5$ hexo g
INFO Start processing
INFO Files loaded in 392 ms
WARN No layout: categories/index.html
WARN No layout: tags/index.html
原因是next主题的代码没有提交到源码中,git clone
下载的代码不全,重新提交代码后问题解决。
参考:
https://www.cnblogs.com/dmego/p/7664877.html
http://notes.iissnan.com/2016/publishing-github-pages-with-travis-ci/
https://segmentfault.com/a/1190000011218410