Github Pages + VuePress + Travis CI 实现自动部署文档

内容纲要

想着按照网上的教程直接部署的https://zhuanlan.zhihu.com/p/36390666... 不知道怎么总是出错

于是用了其他的方法实现了这个过程

准备

  • Git
  • Github repo
  • openssl
  • travis
  • travis-ci

添加travis.yml

建立一个travis.yml模板:

language: node_js
sudo: required
node_js:
- node
branch: master
cache:
  directories:
  - node_modules
before_install:

script:

dist: xenial

添加Deploy key

到目标仓库,在仓库设置中添加deploy key。
在本地使用ssh-keygen生成key

ssh-keygen -t rsa -C "your_email@example.com"

默认情况会在~/.ssh生成两个文件:id_rsaid_rsa.pub。将id_rsa.pub的内容粘贴到Github的deploy key处,要勾选'Allow write access'


安装travis

根据情况,下列命令中你可能不需要用--pro这个arg,请知悉
使用gem安装travis cli,这个可以参看网上教程

登录travis

gem install travis
travis login --auto --pro

使用travis加密生成私钥文件

travis encrypt-file id_rsa --add -r your_account/your_repo --pro --com

注意,我的账号要加上--pro,由于travis-ci从org迁移至com结尾的域,因此要加--com

这个命令会自动生成before_install的部分。

before_install:
- openssl aes-256-cbc -K $encrypted_xxxxxxxx_key -iv $encrypted_xxxxxxxx_iv
  -in id_rsa.enc -out ~/.ssh/id_rsa -d

其中有两个关键的key值会传到travis-ci对应的repo上,就是encrypt_xxx_key和encrypt_xxx_iv 这个会添加到travis-ci的repo中的environment variable中。

在根目录创建.travis文件夹,并把刚才用命令同时生成的id_rsa.enc放入文件夹中,更改刚才的命令为

before_install:
- openssl aes-256-cbc -K $encrypted_xxxxxxxx_key -iv $encrypted_xxxxxxxx_iv
  -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d

在该文件夹下创建文件ssh_config

Host github.com
  User git
  StrictHostKeyChecking no
  IdentityFile ~/.ssh/id_rsa
  IdentitiesOnly yes

完善before_install

before_install:
- openssl aes-256-cbc -K $encrypted_xxxxxxxx_key -iv $encrypted_xxxxxxxx_iv
  -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d
# Set the permission of the key
- chmod 600 ~/.ssh/id_rsa
# Start SSH agent
- eval $(ssh-agent)
# Add the private key to the system
- ssh-add ~/.ssh/id_rsa
# Copy SSH config
- cp .travis/ssh_config ~/.ssh/config

- git config --global user.name 'your_name'
- git config --global user.email 'your@email.com'

在根目录创建deploy文件夹,在其中添加deploy.sh文件

#!/usr/bin/env sh

# 确保脚本抛出遇到的错误
set -e

# 生成静态文件
npm run docs:build

git clone https://github.com/CUP-ACM-Programming-Club/CUPACM-Docs.git -b gh-pages pages
rm -rf pages/*.html
rm -rf pages/assets
rm -rf pages/dist
cp -r docs/.vuepress/dist/* pages
cd pages
git add -A
git commit -m "deploy `TZ=UTC-8 date +'%Y-%m-%d %H:%M:%S'`"
git config user.email 'your@email'
git config user.name 'your_name'
git push -f git@github.com:CUP-ACM-Programming-Club/CUPACM-Docs.git gh-pages

cd -

以上内容请根据自身需要更改
执行命令

git update-index --chmod=+x ./deploy/deploy.sh

install添加执行代码

install:
- ./deploy/deploy.sh

要注意的是,在PR的时候encrypt_xxxx这两个变量Travis CI是不会传入虚拟机实例的,因此如果按照正常的流程这个过程是不会进行自动部署的。我们也不希望在PR前任何fork分支都被执行自动部署到主分支中去。

因此用条件判断语句做以下处理

before_install:
- '[[ -n ${encrypted_xxxxxxx_iv+x} ]] && openssl aes-256-cbc -K $encrypted_xxxxxx_key -iv $encrypted_xxxxxx_iv
  -in .travis/id_rsa.enc -out ~/.ssh/id_rsa -d && chmod 600 ~/.ssh/id_rsa && eval $(ssh-agent) && ssh-add ~/.ssh/id_rsa && cp .travis/ssh_config ~/.ssh/config
  || echo "Pull Request mode"'
- git config --global user.name 'yourname'
- git config --global user.email your@email.com'
- export TZ='Asia/Shanghai'
script:
- '[[ -n ${encrypted_xxxxxx_iv+x} ]] && chmod a+x ./deploy/deploy.sh && ./deploy/deploy.sh || npm run docs:build'

这样问题就能得到解决。

然后根据上面的shell,我们会把Page push到gh-pages分支上。因此要在repo的setting中设置Github Pages分支为gh-pages

完成

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇