以下内容复制转载原网址
因为之前留着链接,结果过一段时间之后,链接就失效了。所以打算把内容都粘上备着。
该文写给爱折腾的人,对纯新手不友善,没有辣么详细地说明如何安装node、git或者是hexo,所以关于这些问题可先行google
,如有其它问题请在这里或者我的简书 上留言
使用hexo
而不使用jekyll
在github上搭blog最大的问题就是,每次提交都需要先hexo g
,然后再push
生成的文件们,这样哪怕是改一个小的地方都需要重新编译全部blog,想想都蛋疼(虽然我还没有多少文章),所以决定使用Travis 来自动持续集成提交到github以后的操作
网上一搜有很多的教程,看了好多然后东拼西凑才最终成功,遂决定记录下来最终成功的这个方法,以免忘记
本文中实现的最终效果是:
写完blog后,直接push
到github的source
分支,其它的就可以不用管了
由于我的.travis.yml
配置文件里设置监听的就是source
分支,所以会触发webhook
Travis
则会将该项目clone
过去,然后按照.travis.yml
的设置执行接下来的命令
执行完成后,再将编译好的文件们发送到自己的服务器,顺便push
回master
分支上来
这样就可以在blog.godi13.com 和Godi13.github.io 上都访问blog了
Github 首先,按规定名称XXXXX.github.io
,其中XXXXX
为你的用户名,如下图中的Godi13.github.io
创建项目
为了使travis
能够将编译好的文件们push
回咱们的github,我们需要生成token
,步骤如下:
点击右上方头像,然后点setting
点击Personal access tokens
点击Generate new token
![](http://images.godi13.com/2017-04-10-token2.png -total)
为token
起一个名字,勾选repo
,然后点击生成
![](http://images.godi13.com/2017-04-10-repo.png -total)
生成`token`以后,一定要复制好,因为只显示一次,如果丢失只能再次生成了
Travis
使用github
帐号登录Travis ,右上方按钮点击同步项目,下方打开需要集成的项目,最后点击齿轮进入项目配置页面
打开Build only if .travis.yml is present
,右下角的那个其实也可以关了,然后往下移动页面到环境变量
在这里我将变量名称名为REPO_TOKEN
,放上token
,点击Add
按钮
Terminal 回到终端,进入blog
所在的文件夹下,新建.travis.yml
文件,并添加以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 language: node_js node_js: stable branches: only: - source cache: apt: true yarn: true directories: - node_modules before_install: - git config --global user.name "Godi13" - git config --global user.email "mqzq9388@gmail.com" - curl -o- -L https://yarnpkg.com/install.sh | bash - export PATH=$HOME/.yarn/bin:$PATH - npm install -g hexo-cli install: - yarn script: - hexo clean - hexo generate after_success: - cd ./public - git init - git add --all . - git commit -m "Travis CI Auto Builder" - git push --quiet --force https://$REPO_TOKEN@github.com/Godi13/Godi13.github.io.git master
然后,准备push
该项目到github,看下是否成功,如果是新项目可参照下面的git指令
1 2 3 4 5 6 7 8 git init git remote add origin git@github.com:Godi13/Godi13.github.io.git git checkout --orphan source git add -A git commit -m "Travis CI" git push
关于 --orphan
请参考 如何建立一個沒有 Parent 的獨立 Git branch
如最终成功则会看到
到这里关于hexo和github的事情就先吿一段落,接下来就是服务器与tarvis
服务器 按照上面.tarvis.yml
的设置,其实我只需要在after_success
这个生命周期中,把public
文件夹下的所有文件传送到服务器指定的路径即可,接下来就是解决如何让tarvis
往我的服务器传东西的问题了
在此之前,你需要将本机生成的密钥传到服务器上
1 2 3 4 5 ssh-keygen -t rsa ssh-copy-id <登录部署服务器用户名>@<部署服务器地址> -p <部署服务器ssh端口> ssh <登录部署服务器用户名>@<部署服务器地址> -p <部署服务器ssh端口>
如果登录服务器成功,接下来需要安装travis
命令行工具
1 2 3 4 5 6 7 gem install travis travis login --auto travis encrypt-file ~/.ssh/id_rsa --add
执行完以后会发现在travis
网站项目里面的环境变量里多了两个参数
并且在.travis.yml
里的before_install
周期中多了下面这2行
1 2 - openssl aes-256-cbc -K $encrypted_97d432d3ed20_key -iv $encrypted_97d432d3ed20_iv -in id_rsa.enc -out ~\/.ssh/id_rsa -d
默认生成的命令可能会在/
前面带转义符\
,我们不需要这些转义符,手动删掉所有的转义符,否则可能在后面引发莫名的错误
之后为了保证命令的顺利运行,我们还需要正确地设置权限和认证
1 2 3 4 5 before_install - openssl aes-256-cbc -K $encrypted_97d432d3ed20_key -iv $encrypted_97d432d3ed20_iv -in id_rsa.enc -out ~/.ssh/id_rsa -d - chmod 600 ~/.ssh/id_rsa - echo -e "Host 主机IP地址\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
最后,就是在after_success
周期中,添加上传服务器的指令即可,在这里要注意,如果没有stricthostkeychecking=no
参数,将构建失败,详细原因请参考通过travis部署代码到远程服务器
1 2 - scp -o stricthostkeychecking=no -P $PORT -r public/* 用户@域名:/路径
但使用scp
有很多问题,所以后来我决定改用rsync
命令,缺点是端口号就不能用travis环境来加密了,如果哪个朋友有更好的方案希望能告诉我,关于rsync
请参考介绍 rsync 数据同步工具
1 2 - rsync -rv --delete -e 'ssh -o stricthostkeychecking=no -p 端口号' public/ 用户@域名:/路径
最后在这里放上我最终的.travis.yml 配置参数,希望本文对大家能有所帮助
参考资料