该文写给爱折腾的人,对纯新手不友善,没有辣么详细地说明如何安装node、git或者是hexo,因此关于这些问题可先行
使用hexo
而不使用jekyll
在github上搭blog最大的问题就是,每次提交都须要先hexo g
,而后再push
生成的文件们,这样哪怕是改一个小的地方都须要从新编译所有blog,想一想都蛋疼(虽然我尚未多少文章),因此决定使用Travis来自动持续集成提交到github之后的操做git
网上一搜有不少的教程,看了好多而后东拼西凑才最终成功,遂决定记录下来最终成功的这个方法,以避免忘记github
本文中实现的最终效果是:web
写完blog后,直接push
到github的source
分支,其它的就能够不用管了npm
因为个人.travis.yml
配置文件里设置监听的就是source
分支,因此会触发webhook
缓存
Travis
则会将该项目clone
过去,而后按照.travis.yml
的设置执行接下来的命令ruby
执行完成后,再将编译好的文件们发送到本身的服务器,顺便push
回master
分支上来bash
这样就能够在blog.godi13.com和Godi13.github.io上都访问blog了服务器
首先,按规定名称XXXXX.github.io
,其中XXXXX
为你的用户名,以下图中的Godi13.github.io
建立项目hexo
为了使travis
可以将编译好的文件们push
回我们的github,咱们须要生成token
,步骤以下:
1) 点击右上方头像,而后点setting
2) 点击Personal access tokens
3) 点击Generate new token
4) 为token
起一个名字,勾选repo
,而后点击生成
<div class="tip">生成token
之后,必定要复制好,由于只显示一次,若是丢失只能再次生成了</div>
1) 使用github
账号登陆Travis,右上方按钮点击同步项目,下方打开须要集成的项目,最后点击齿轮进入项目配置页面
2) 打开Build only if .travis.yml is present
,右下角的那个其实也能够关了,而后往下移动页面到环境变量
3) 在这里我将变量名称名为REPO_TOKEN
,放上token
,点击Add
按钮
回到终端,进入blog
所在的文件夹下,新建.travis.yml
文件,并添加如下内容
# 使用语言 language: node_js # node版本 node_js: stable # 设置只监听哪一个分支 branches: only: - source # 缓存,能够节省集成的时间,这里我用了yarn,若是不用能够删除 cache: apt: true yarn: true directories: - node_modules # tarvis生命周期执行顺序详见官网文档 before_install: - git config --global user.name "Godi13" - git config --global user.email "mqzq9388@gmail.com" # 因为使用了yarn,因此须要下载,如不用yarn这两行能够删除 - curl -o- -L https://yarnpkg.com/install.sh | bash - export PATH=$HOME/.yarn/bin:$PATH - npm install -g hexo-cli install: # 不用yarn的话这里改为 npm i 便可 - yarn script: - hexo clean - hexo generate after_success: - cd ./public - git init - git add --all . - git commit -m "Travis CI Auto Builder" # 这里的 REPO_TOKEN 即以前在 travis 项目的环境变量里添加的 - git push --quiet --force https://$REPO_TOKEN@github.com/Godi13/Godi13.github.io.git master
而后,准备push
该项目到github,看下是否成功,若是是新项目可参照下面的git指令
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
往个人服务器传东西的问题了
在此以前,你须要将本机生成的密钥传到服务器上
ssh-keygen -t rsa # 而后一路回车便可 # ssh-copy-id 可能须要另行安装 # 若是ssh默认端口是22,则不须要 -p ssh-copy-id <登陆部署服务器用户名>@<部署服务器地址> -p <部署服务器ssh端口> ssh <登陆部署服务器用户名>@<部署服务器地址> -p <部署服务器ssh端口>
若是登陆服务器成功,接下来须要安装travis
命令行工具
# 安装travis命令行工具,如没法使用gem指令须先安装ruby gem install travis # --auto自动登陆github账号 travis login --auto # 此处的--add参数表示自动添加脚本到.travis.yml文件中 travis encrypt-file ~/.ssh/id_rsa --add # 这个命令会自动把 id_rsa 加密传送到 .git 指定的仓库对应的 travis 中去
执行完之后会发如今travis
网站项目里面的环境变量里多了两个参数
而且在.travis.yml
里的before_install
周期中多了下面这2行
- openssl aes-256-cbc -K $encrypted_97d432d3ed20_key -iv $encrypted_97d432d3ed20_iv -in id_rsa.enc -out ~\/.ssh/id_rsa -d
默认生成的命令可能会在/
前面带转义符\
,咱们不须要这些转义符,手动删掉全部的转义符,不然可能在后面引起莫名的错误
以后为了保证命令的顺利运行,咱们还须要正确地设置权限和认证
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部署代码到远程服务器
# 因为我修改了默认的port,因此在这里也进行了加密处理 - scp -o stricthostkeychecking=no -P $PORT -r public/* 用户@域名:/路径
但使用scp
有不少问题,因此后来我决定改用rsync
命令,缺点是端口号就不能用travis环境来加密了,若是哪一个朋友有更好的方案但愿能告诉我
# public 后面加上/便可将该目录下的文件都传送到服务器了 - rsync -rv --delete -e 'ssh -o stricthostkeychecking=no -p 端口号' public/ 用户@域名:/路径
最后在这里放上我最终的.travis.yml配置参数,但愿本文对你们能有所帮助,若是以为不错记得点赞~ 若是能告诉我为何以为我写的还不错就更好了,我就知道该怎么再接再砺了,谢谢你们的支持~~~~