更新记录
hexo-CI自动部署:基于Github Pages+Github Actions
hexo-CI自动部署
构建说明
hexo博客项目已经构建有好一段时间了,一般都是直接通过指令进行发布,为了适配在不同地方编辑笔记快速直接发布可采用CI的方式进行自动部署,此处介绍的是通过GitHab Actions+Github Pages的方式进行发布(分仓库存储:用于区分版本源文件管理&网站发布版本管理),随后则可直接通过typora编辑md文件并上传到指定仓库路径,自动部署网站内容
Github Page:是github
网站提供的静态网站服务
travis: 是在线托管的CI
服务,用Travis
来进行持续集成,参考文章
github Actions:借助Github原生CI/CD构建自动部署
原有构建思路:A仓库管理源码提交信息、B仓库管理构建后的代码版本信息
1
| hexo clean & hexo g & hexo deploy
|
基于上述思路是将source和发布仓库进行分离,可考虑在源码仓库下借助github pages+CI自动集成部署环境,构建工作流部署信息(可同源仓库发布或者跨仓库发布)
CI\CD概念:「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」、「持续部署(Continuous Deployment)」
1 2 3
| # 本地编辑文件推送到指定的分支
# 构建CI环境自动部署
|
1.github Actions 跨仓库发布
在源码仓库构建配置文件:.github/.workflows/autoDeploy.yml
1 2 3
| a.拉取指定分支代码(gh-pages) b.设定node.js环境、构建项目模块依赖缓存 c.服务器验证并执行指令部署
|
可先从Github Actions仓库、Github Marketplace中搜索可用的Actions,在此基础上造轮子
构建配置参考
- 采用SSH方式推送指定仓库,通过指令生成新的SSH秘钥
1 2
| # 在当前目录生成hexo-deploy-key私钥文件和hexo-deploy-key.pub公钥文件 ssh-keygen -f hexo-deploy-key -C "username.github.io"
|
A仓库存储源文件内容,B仓库存储发布内容,则在B仓库中配置公钥文件,A仓库中配置私钥文件
B仓库配置:Settings -> Deploy keys -> 添加Deploy key -> 填充 hexo-deploy-key.pub文件内容,勾选Allow write access
配置
A仓库配置:Settings -> Secrets -> Actions -> 添加属性配置HEXO_DEPLOY_KEY_PRI
,填充hexo-deploy-key私钥文件内容
其构建原理为监听指定分支变化,通过checkout分支、访问目录、部署环境并执行hexo三连。除却github仓库访问权限,其他相关的配置均引用代码中的内容(和本地发布操作一样,只不过是让机器替代执行)
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 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| name: CI自动部署
on: push: branches: [dev]
jobs: hexo-deployment: runs-on: ubuntu-latest env: TZ: Asia/Shanghai
steps: - name: 1.checkout分支 uses: actions/checkout@v2 with: ref: dev - name: extend:Checkout主题仓库 uses: actions/checkout@v2 with: repository: holic-x/hexo-theme-butterfly ref: dev-custom path: themes/butterfly
- name: 2.node环境安装 uses: actions/setup-node@v1 with: node-version: '12.x'
- name: 3.缓存 Hexo 模块,提高构建速度 uses: actions/cache@v1 id: cache with: path: node_modules key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- name: 4.安装依赖 if: steps.cache.outputs.cache-hit != 'true' run: | npm install --save
- name: 5.服务器验证 env: ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY_PRI }} run: | sudo timedatectl set-timezone "Asia/Shanghai" mkdir -p ~/.ssh/ echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts # 填写服务器IP(如果是自建Git仓库则填写相应的服务器IP) - name: 6.三连操作部署 env: BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }} BING_TOKEN: ${{ secrets.BING_TOKEN }} GIT_NAME: ${{ secrets.GIT_NAME }} GIT_EMAIL: ${{ secrets.GIT_EMAIL }} run: | git config --global user.name ${GIT_NAME} # GitHub用户名 git config --global user.email ${GIT_EMAIL} # GitHub用户名邮箱 npx hexo clean && npx hexo g && npx hexo deploy
|
或者可以直接引用现成的轮子:
a.部署到Github Pages:theme-keep/hexo-deploy-github-pages-action
b.部署到阿里云、腾讯云服务器:easingthemes/ssh-deploy
部署内容格式参考如下所示
1 2 3 4 5 6
| deploy: type: git repository: git@github.com:username/username.github.io.git branch: master name: username email: username@gmail.com
|
2.CI引入自动提交URL至搜索引擎
结合hexo-submit-urls-to-search-engine插件,参考SEO优化说明
在Settings->Secrets->Actions中配置属性,随后添加一个步骤用于发布
参数 |
说明 |
BAIDU_TOKEN |
根据文档指示生成 |
BING_TOKEN |
根据文档指示生成 |
|
1 2 3 4 5 6 7 8 9 10
| - name: 6.三连操作部署 env: BAIDU_TOKEN: ${{ secrets.BAIDU_TOKEN }} # 设置环境变量BAIDU_TOKEN BING_TOKEN: ${{ secrets.BING_TOKEN }} # 设置环境变量BING_TOKEN GIT_NAME: ${{ secrets.GIT_NAME }} GIT_EMAIL: ${{ secrets.GIT_EMAIL }} run: | git config --global user.name ${GIT_NAME} # GitHub用户名 git config --global user.email ${GIT_EMAIL} # GitHub用户名邮箱 npx hexo clean && npx hexo g && npx hexo deploy
|