前言 由于身边有很多台电脑,每次写blog都要pull和push,过于麻烦,于是打算尝试用githubAction自动部署
准备 首先,确保你能在本地运行并将静态文件传到github上。这一部分不是本文主要内容,不做详细描述。接下来,本文你按照一个存储库两个分支来讲解。一个分支为main,存储hexo,另一个分支为gh-pages,作为静态文件存储及github pages的源文件。
接着,把你本地的hexo文件上传到main分支下。获取一个ssh,将公钥上传至githubSSH keys ,私钥作为Repository secrets上传到Action secrects(Settings-Secrets and variables-Actions secrets and variables-Repository secrets),不妨设name为SSH_PRIVATE_KEY。
做好这些准备工作,就可以来配置action了。
Action详解 你需要在.github/workflows下创建你的action文件,文件名任意,后缀为yaml。
基本信息 触发条件按设为push到main分支,node版本设置为最新版。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 name: hexo CI on: push: branches: ["main" ] pull_request: branches: ["main" ] jobs: build: runs-on: ubuntu-latest timeout-minutes: 60 strategy: matrix: node-version: [22. x ]
修改__config.yaml 主要修改点在于推送部分deploy。
需要使用ssh连接推送,分支是gh-pages
以下是一个可能的示例:
1 2 3 4 deploy: type: git repo: git@github.com:{YourUsername}/blog.git branch: gh-pages
Steps Checkout repository 我也不知道这个干什么用,但是既然github建议有,那就写上吧。
1 2 - name: Checkout repository uses: actions/checkout@v4
Setup SSH 用于设置SSH密钥,这样才能在生成完毕后推送到gh-pages分支。
1 2 3 4 5 6 7 8 - name: Setup SSH run: | mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
这个时候你设置的SSH_PRIVATE_KEY就起作用了。
hexo 启动 就像你在本地运行一样。
1 2 3 4 5 6 7 8 - name: Install Hexo CLI run: npm install -g hexo-cli - name: Configure Git run: | git config --global user.name "{这里填你的github用户名}" git config --global user.email "{填邮箱}" - run: npm install - run: hexo g -d
或者,你也可以使用任何一个具有更改你的存储库权限的github用户,不过要注意ssh公钥上传
小帮助 如果你在配置时遇到了一些问题,不妨做一下测试。主要问题就出现在ssh私钥的配置上。
1 2 3 4 5 6 7 8 - name: Test SSH key run: | # 只查看前两行,防止泄露完整私钥 head -n 2 ~/.ssh/id_rsa # 可选:查看文件是否存在、权限 ls -l ~/.ssh/id_rsa - name: Test SSH run: ssh -T git@github.com
Test SSH出现return1为正常现象,观察终端返回即可。
总结 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 name: hexo CI on: push: branches: ["main" ] pull_request: branches: ["main" ] jobs: build: runs-on: ubuntu-latest timeout-minutes: 60 strategy: matrix: node-version: [22. x ] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup SSH run: | mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan github.com >> ~/.ssh/known_hosts env: SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }} - name: List environment variables run: | # 可选:查看文件是否存在、权限 ls -l ~/.ssh/id_rsa - name: Test SSH run: ssh -T git@github.com - name: Install Hexo CLI run: npm install -g hexo-cli - name: Configure Git run: | git config --global user.name "{这里填你的github用户名}" git config --global user.email "{填邮箱}" - run: npm install - run: hexo g -d
把它上传到main分支,如果顺利的话你可以看到一个成功的action和一个新的分支gh-pages。注意将githubpages的Build and deployment的分支改为gh-pages。
结语 现在,在存储库页面点.号,进入github.dev,你就可以随时随地写blog了。
本文就是这样写完的。