通过Github Actions实现Hexo的持续集成
最近有开发一个Hexo的博客主题,所以就去研究了一下如何用Github Actions进行持续集成来简化开发的流程
首先使用hexo init生成一个博客,安装一下 hexo-deployer-git 的插件
yarn add hexo-deployer-git
接下来,创建 ./.github/workflows/deploy.yml
name: CI run-name: '🚀 部署 ${{ github.actor }} 的 Commit ' on: push: branches: - main env: GIT_USER: <你的Github用户名> GIT_EMAIL: <你的Github邮箱> jobs: build: name: ℹ️ 在 Node.js ${{ matrix.node_version }} 和 ${{ matrix.os }} 上进行构建 runs-on: ubuntu-latest strategy: matrix: os: [ubuntu-latest] node_version: [16.x] steps: - name: 📝 设定分支 uses: actions/checkout@v3 # 当然你也可以把主题直接放在themes文件夹里,但是这样就得手动更新主题了 - name: 📝 设定主题的分支 uses: actions/checkout@v3 with: repository: EduarteXD/hexo-theme-squirrelhole ref: main path: themes/hexo-theme-squirrelhole - name: ℹ️ 使用 Node.js ${{ matrix.node_version }} uses: actions/setup-node@v3 with: node-version: ${{ matrix.node_version }} - name: ⚙️ 初始化构建环境 env: HEXO_DEPLOY_PRI: ${{ secrets.HEXO }} run: | sudo timedatectl set-timezone "Asia/Shanghai" mkdir -p ~/.ssh/ echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts git config --global user.name $GIT_USER git config --global user.email $GIT_EMAIL cp _config.theme.yml themes/hexo-theme-squirrelhole/_config.yml - name: ⚙️ 安装依赖 run: | npm install - name: ✅ 部署 run: | npm run deploy
创建 _config.theme.yml 作为主题的配置文件,这要按照你选择的主题作相应修改,不详细说了,每个主题都应该有提供它的模板的
编辑 _config.yml ,找到deploy小节(没有则加上),修改为
# Deployment ## Docs: https://hexo.io/docs/one-command-deployment deploy: type: git repo: git@github.com:<你的Github用户名>/<你的Github Pages仓库名称>.git branch: main
再将 theme 小节改成你选择的主题
在 ./source 目录中新建CNAME 文件,写上你的Github Pages的域名
然后将你刚生成的博客推送到提前建立好的Github仓库里,点开Actions,应该就可以看到你刚刚配置的Action已经在运行了,但由于我们还没有配置好权限,任务很快便会失败
接下来,打开你的Terminal,使用
# Windows可能得改一下保存目录 ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/Github
生成Github和Github.pub两个文件,分别是私钥和公钥
打开你的Pages仓库,点击Settings->Deploy keys,点击Add deploy key按钮,将刚刚生成的Github.pub公钥文件粘贴进去,勾选Allow write access后,点击Add key保存
回到博客的仓库,点击Settings->Secrets->Actions,点击 New repository secret将你的Github私钥粘贴进去,命名为HEXO(即上面env段中设置的名字)
env: HEXO_DEPLOY_PRI: ${{ secrets.HEXO }}
之后在重新运行Action,应该就可以成功部署了