目录

    1. Hexo 简介

    Hexo 是使用 Node.js 开发的一个简洁、高效、开源的静态博客生成器。Hexo 能够以非常快的速度将 Markdown 渲染成静态的 HTML 文件。类似于 Jekyll、Ghost、Octopress,可以用于创建博客。

    Hexo 具有如下优势:

    • 使用 Node.js ,搭建环境简单。Jekyll 搭建环境非常麻烦。
    • 方便托管到 GitHub Pages ,由于 Hexo 生成的是 HTML ,十分方便部署
    • 支持 Markdown

    2. 安装 Hexo

    安装 Node.js 和 NPM 之后,建议更换为国内的 NPM 源,加快依赖包的安装速度

    npm install -g cnpm --registry=https://registry.npm.taobao.org
    cnpm install install
    

    安装 Hexo

    cnpm install -g hexo 
    

    初始化 Hexo

    hexo init myblog
    

    生成 scaffolds、drafts、public、db.json、_config.yml、package.json、theme 等文件。

    本地启动服务,默认为 4000 端口

    cd myblog
    hexo s
    # 指定服务端口为 80
    hexo s -P 80
    

    3. Ghost 迁移文章

    由于之前使用 Ghost 搭建博客,需要从 Ghost 后台,导出 json 格式的博客数据。然后,通过 Hexo 插件工具,将 json 数据转换为 Markdown 文件。

    安装 hexo-migrator-ghost

    npm install -g hexo-migrator-ghost
    

    导入数据,转换为 Markdown 文件

    hexo migrate ghost <source.json>
    

    执行完毕后,在 source 目录下,会自动生成每篇文档对应的 Markdown 文件。

    4. 发布到 GitHub Pages

    第一步,在 GitHub 新建一个 your_name.github.io 的项目。

    第二步,在 _config.yml 中配置 repo

    deploy:
      type: git
      repo:
        github: git@github.com:your_name/your_name.github.io.git
      branch: master
    

    第三步,生成 HTML

    hexo generate
    

    第四步,部署到 GitHub Pages

    hexo deploy
    

    根据提示输入账户,密码即可完成部署。通过 http://your_name.github.io 访问博客。

    5. CI 自动发布

    由于仅使用 GitHub Pages 作为博客的发布地址,还需要一个仓库地址用于托管 Hexo 项目,还有 Markdown 源文件。

    第一步,在 GitHub 的 https://github.com/settings/keys 页面,生成一对 SSH Key ,点击【Add SSH key】将 pubulic key 填入其中。

    第二步,在 GitLb 项目的 【settings/ci_cd】页面,【Secret variables 】处,新增环境变量 DEPLOY_KEY,值为 private key。

    第三步,配置 CI 流程。使用 GitLab 作为 Hexo 源码托管仓库,通过 CI 自动发布到 GitHub Pages。

    在根目录下,新建文件 .gitlab-ci.yml 内容如下:

    image: node:4.2.2
    pages:
      cache:
        paths:
        - node_modules/
      before_script:
      - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
      - eval $(ssh-agent -s)
      - ssh-add <(echo "$DEPLOY_KEY")
      - mkdir -p ~/.ssh
      - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
      script:
      - npm install hexo-cli -g
      - npm install
      - hexo deploy
      artifacts:
        paths:
        - public
      only:
      - master
    

    如果没有 CI 配置,那么需要在本地生成 HTML 文件,再部署到 GitHub Pages 。通过配置 CI ,现在仅需要将 Markdown 文件提交到 GitLab ,GitLab CI 将自动完成部署。