作为一种静态博客,Hexo 的每一次更新都要在本地执行 hexo clean
、hexo d -g
等命令。那么,有什么办法可以简化这些过程呢? 把命令合成一个脚本或许是一个选择,但更好的方案是使用服务于 DevOps 的公共 CI/CD 服务。
使用这些服务并不复杂,总的来说可以概括为以下几步:
登陆平台
根据需要填写机密信息(即 Secrets
),如 GitHub Token
、SSH Keygen
编写配置文件并放在指定位置
对于不同的需求,配置文件也不完全相同。我的需求是通过 Hexo 本身的 deploy 部署到 GitHub 仓库,在通过手动追加 tag 实现 jsDelivr 的全站加速。 我使用的是 NexT 主题,配置文件中关于静态资源的设定如下,会在生成过程中通过 sed
替换为具体的版本(XX_TAG
变量)。
1 2 3 4 css: //cdn.jsdelivr.net/gh/ljcbaby/ljcbaby.github.io@master/css js: //cdn.jsdelivr.net/gh/ljcbaby/ljcbaby.github.io@master/js images: //cdn.jsdelivr.net/gh/ljcbaby/ljcbaby.github.io@master/images
GitHub Actions
GitHub Actions
自动化您的工作流程,从构思到生产
由 GitHub 提供的服务,仅支持 GitHub 内的仓库,将 YAML 格式的配置文件放在 git_root/.github/workflows/
下,当仓库被 push
的时候便会自动匹配执行。
参考配置文件
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 name: deploy # Actions 名字 on: # 触发条件 push: branches: [ master ] # 仅向 master 分支 push 时触发,该分支存放博客源文件 jobs: build: # job id name: Build and publish # job 名,不写默认使用 job id runs-on: ubuntu-latest # 运行环境,可选 ubuntu-latest, ubuntu-18.04, ubuntu-16.04, windows-latest, windows-2019, windows-2016, macOS-latest, macOS-10.14 steps: - uses: actions/checkout@v1 # 拉取博客最新源文件 with: submodules: true - name: Install Node.js # 指定 Node.js 版本 uses: actions/setup-node@v2 with: node-version: '14' - name: Setup Hexo env # 初始化 Hexo 环境 run: | npm install hexo-cli -g npm install - name: Pre-Generate # 初始化 其他 环境 env: GH_TOKEN: $ run: | export TZ='Asia/Shanghai' export ACTION_TAG=v2.1.$.$(git log --format=%h -1) git config --global push.default matching git config --global user.name "github-actions[bot]" git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" sed -i "s~git@github.com:ljcbaby/ljcbaby.github.io.git~https://${GH_TOKEN}@github.com/ljcbaby/ljcbaby.github.io.git~" _config.yml sed -i "s/ljcbaby.github.io@master/ljcbaby.github.io@${ACTION_TAG}/g" _config.next.yml - name: Generate public files # 生成博客预发布文件 run: | hexo clean hexo g - name: Deploy # 发布 这段我按照自己的多点发布做了调整 env: GH_REF: github.com/ljcbaby/ljcbaby.github.io.git # GitHub 仓库 SSH 地址 run: | export TZ='Asia/Shanghai' export ACTION_TAG=v2.1.$.$(git log --format=%h -1) git clone --depth 1 https://${GH_REF} .deploy_git hexo d cd .deploy_git git tag $ACTION_TAG git push --tags cd .. rm -f _config.yml mv _config2.yml _config.yml hexo d
Travis CI
Travis CI.com
测试和部署你的项目的最简单方法
这家比较特别,有 Travis CI.org 和 Travis CI.com 之分。前者免费但不支持 GitHub 的私有库,后者收费(GitHub 的学生包可以白嫖)。配置文件为 git_root
下的.travis.yml
。
目前官方发布了公告,将 travis-ci.org 合并到了 travis-ci.com ,以后就只有一个 travis-ci 了。
参考配置文件
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 os: linux dist: bionic language: node_js node_js: - 'lts/*' # - 'stable' script: "true" branches: only: - master addons: # Travis CI建议加的,自动更新api apt: update: true cache: directories: - node_modules before_install: - export TZ='Asia/Shanghai' - export TRAVIS_TAG=v1.0.$TRAVIS_BUILD_NUMBER.$(git log --format=%h -1) - git config --global push.default matching - git config --global user.name "Travis CI" - git config --global user.email "bot@travis-ci.org" - sed -i'' "s~git@github.com:ljcbaby/ljcbaby.github.io.git~https://${Travis_Token}:x-oauth-basic@github.com/ljcbaby/ljcbaby.github.io.git~" _config.yml - sed -i "s/ljcbaby.github.io@master/ljcbaby.github.io@${TRAVIS_TAG}/g" _config.next.yml install: - npm install hexo-cli --save - npm install deploy: skip_cleanup: true provider: script script: sh deploy.sh on: branch: master
其中 deploy.sh
如下
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 #!/bin/bash if [ -d "./.deploy_git" ]; then echo "Removing .deploy_git folder..." rm -rf ./.deploy_git echo "Folder removed." fi # Initialize target with currently deployed files git clone --branch=master https://github.com/ljcbaby/ljcbaby.github.io.git .deploy_git cd .deploy_git # Remove all files before they get copied from ../public/ # so git can track files that were removed in the last commit find . -path ./.git -prune -o -exec rm -rf {} \; 2> /dev/null cd ../ if [ ! -d "./public" ]; then hexo generate fi # Run deployment hexo deploy cd .deploy_git git tag $TRAVIS_TAG git push --tags
这份配置的生成参考了以下内容使用 jsDelivr 为 Hexo 博客提供高效免费的 CDN 加速 - 一个人的孤落时辰 A1exInamin.github.io/deploy.sh at hexo · A1exInamin/A1exInamin.github.io
Gitee Pages 服务
Gitee Pages 服务
一个支持 Jekyll、Hugo、Hexo 静态网站的服务
唯一的缺点是每次更新博客要手动部署一次,只有付费的 Gitee Pages Pro 才能自动更新 Pages 。
然而付费的 Gitee Pages Pro 似乎已经买不到了。
Jenkins
Gitee 和 GitLab 可以使用这家 CI ,和 Travis CI 类似。
低代码托管平台
Vercel
Vercel 将最佳的开发者体验与对终端用户性能的痴迷关注相结合。 我们的平台使前端团队能够做他们最好的工作。
Cloudflare Pages
在创纪录的时间内快速建立网站
Netlify
用于自动化现代 Web 项目的多合一平台
低代码平台,顾名思义,不需要大段代码 相比之前要写生成文件的基本是要简单多了。 当然,想要用得好,可以自己写 Shell