where I can talk.

使用 Travis CI 自动部署 Hexo

· Read in about 2 min · (266 Words)
Travis CI Hexo Github

关于 Travis CI

提供持续集成服务,只支持 Github,因为只能 Sign in with Github。

登录 travis-ci.org 后

可以看到相应 Github 中的库,然后开启需要进行构建的项目,

Imgur

如果没有看到类似的话,先 Sync account 一下。

Travis-CI 是通过 push 行为来触发构建的,需要用户在根目录放一个**.travis.yml** 文件,具体怎么写,参阅官方文档

使用 GPG

安装 Travis CI Command Line Client:

gem install travis

Log in:

travis login -com

Set up:

travis encrypt super_secret_password=$random_password --add
gpg -c super_secret.txt

$random_password 可以使用 pwgen 等工具生成。 然后将 $random_password 写入 super_secret.txt 中。

此时 .travis.yml 中:

env:
  global:
    secure: ... encoded secret ...

在 .travis.yml 中加入:

before_install:
  - echo $super_secret_password | gpg --passphrase-fd 0 super_secret.txt.gpg

参阅官方文档

使用 SSH

生成 SSH 密钥:

ssh-keygen -t rsa -b 4096 -C "<your_email_address>" -f travis-ci.key

然后将 SSH 公钥上传至 Github。

使用 Travis 加密文件:

travis login
travis encrypt-file travis-ci.key --add

在 .travis.yml 中加入:

addons:
  ssh_known_hosts: "github.com"

关于 commit 记录

使用了一段时间后发现每次自动部署后 commit 记录只有一个,原因大概是构建的时候没有 .git 文件夹,很气(╯▔皿▔)╯。

于是,想办法在 .traivs.yml 中加入即可,详细参阅下面的 .traivs.yml。

我的 .travis.yml

language: node_js

node_js:
- '8'

sudo: required

branches:
  only:
  - backup

cache:
  apt: true
  directories:
  - node_modules

before_install:
  - openssl aes-256-cbc -K $encrypted_892621f3cc03_key -iv $encrypted_892621f3cc03_iv
    -in travis-ci.key.enc -out ~/.ssh/id_rsa -d
  - chmod 600 ~/.ssh/id_rsa
  - mv -fv ssh_conf ~/.ssh/config
  - echo $super_secret_password | gpg --passphrase-fd 0 super_secret.txt.gpg
  - git config --global user.name "{$GIT_USER_NAME}"
  - git config --global user.email "{$GIT_USER_EMAIL}"
  - chmod +x deploy.sh

install:
  - npm install -g hexo-cli
  - npm install

script:
  - hexo clean
  - hexo generate

after_success:
  - ./deploy.sh

env:
  global:
    secure: ... encoded secret ...

addons:
  ssh_known_hosts: "github.com"

deploy.sh

#!/bin/bash
set -ev
export TZ='Asia/Shanghai'

git clone -b master $GITHUB_REPO .deploy_git

cd .deploy_git

cp -r ../public/* ./

git add .
git commit -m "Site updated by Travis CI:`date +"%Y-%m-%d %H:%M:%S"`"

git push origin master --force --quiet

至此

直接 push 就可以触发 Travis CI,就不需要每次输入 hexo 命令了。

其实是懒。

Comments