写完博客后同步更新到WordPress和Hexo

前提

需要先把Hexo的源码已经放在新建分支hexo中,静态网页放在master中,目的是把源码push上hexo分支后,Travis CI检测到后,会按照设置好的动作,自动生产静态网页推送到github pages和vps上。

登录 Travis CI 并关联 GitHub 项目

使用github帐号登录Travis,右上方sync account按钮点击同步项目,下方打开需要集成的项目,最后点击齿轮进入项目配置页面,配置如下:
General
ON Build only if .travis.yml is present

ON Build branch updates

配置部署秘钥

# 生成新的SSH密钥 $ ssh-keygen -t rsa

接下来然后把生成的公钥文件(id_rsa.pub)分别添加到 GitHub Deploy Keys,VPS 上的 ~/.ssh/authorized_keys 中,之所以进行这一步是为了实现免密码登录ssh,因为travis-ci自动执行命令是不支持交互式输入密码的,这样 Travis CI 的机器就可以直接访问这些服务器了。

VPS上部署公钥只需要一个命令:

ssh-copy-id <登录部署服务器用户名>@<部署服务器地址>
# 如果ssh默认端口不是22
ssh-copy-id <登录部署服务器用户名>@<部署服务器地址> -p <部署服务器ssh端口>
# 示例
ssh-copy-id travis@123.123.123.123 -p 12345

安装Ruby和travis命令行工具后传输密钥到travis

如果您的计算机已经连接到 Internet,那么最简单安装 Ruby 的方式是使用 yum 或 apt-get。在命令提示符中输入以下的命令,即可在您的计算机上安装 Ruby。

$sudo apt-get install ruby-full # Debian 或 Ubuntu 系统

安装完成后使用ruby -v验证一下版本。之后再运行:

# 安装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 中去

需要注意的是,这些文件加密步骤不能在 Windows 系统下完成,不然在自动部署时会出现神秘的错误(wrong final block length),之后再打开.travis.yml文件,你会看到一段类似如下内容的命令:

before_install:
  - openssl aes-256-cbc -K $encrypted_830d3b21a25d_key -iv $encrypted_830d3b21a25d_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

搞定了密钥认证后,我们还需要修改一下机器的 SSH 配置,因为每次我们使用 ssh 尝试连接到一个我们之前没有连接过的服务器时都会出现这样的提示,必须想办法把这个确认过程给干掉,否则自动部署就会被卡在这里直到超时了。

可以通过在 .travis.yml 中添加 ssh_known_hosts 来实现的

addons:
ssh_known_hosts:
- github.com
- smile365.world

编写 .travis.yml

自动化部署最重要的密钥认证完成后,接下来需要的就是自动集成化需要的步骤集合了,下面仅供参考

 

[kbd]

language: node_js
node_js: stable

# 只监听 source 分支的改动
branches:
only:
– hexo

# 缓存依赖,节省持续集成时间
cache:
yarn: true
directories:
– node_modules

before_install:
# 解密 RSA 私钥并设置为本机 ssh 私钥
– openssl aes-256-cbc -K $encrypted_fced77def1ac_key -iv $encrypted_fced77def1ac_iv
-in id_rsa.enc -out ~/.ssh/id_rsa -d
– chmod 600 ~/.ssh/id_rsa

addons:
ssh_known_hosts:
– github.com
– smile1008.com

# 配置 git
– git config –global user.name “justove”
– git config –global user.email “name@gmail.com”
– yarn global add hexo-cli

install:
# 安装 Hexo 及其依赖
– yarn

script:
# 生成静态页面
– hexo clean
– hexo generate

after_success:
– cd ./public
– git init
– git add –all .
– git commit -m “Travis CI Auto Builder”

# 同时 push 一份到自己的服务器上
– git remote add vps git@smile.com.git
– git push vps master:master –force –quiet
– git push origin master:master –force –quiet

[/kbd]

 

后记

编写 .travis.yml需要根据自己的需要进行更改,感觉这里最折腾的就是传输密钥到travis,需要先配置好ruby环境之类的,折腾了好一阵,Windows不太兼容,最后还是在debian中搞好的。

参考

使用 Travis CI 自动部署 Hexo 博客

一点都不高大上,手把手教你使用 Travis CI 实现持续部署

使用 Travis 自动部署 Hexo 到 Github 与 自己的服务器

添加到SSH已知的主机 – 特拉维斯CI

Ruby 安装 – Linux

安装 Ruby

ssh免密码登录配置方法,(图示加命令)

留下评论