用 Github Action 构建自己的 Jekyll 博客

github actions 工具太好了

Posted by 叉叉敌 on April 18, 2022

思路

对自己的提交的md文档,通过github action编译为静态文件,然后push到username.github.io仓库。从而可以浏览自己的博客。

  1. 创建一个仓库,比如名字为A-repo,用来管理自己的md文件
  2. 上传自己的Jekyll 网站文件,可以参考这个创建的文章;,如果不会的可以参考fastpage来生成也非常的方便。
  3. 创建github actions来自动运行,见最下面的步骤、
    • 先checkout A-repo的master分支。对于的action: actions/checkout@main
    • 构建为Jekyll静态文件 :action:actions/jekyll-build-pages@v1
    • 把静态文件_site push到username.github.io仓库的master分支, s0/git-publish-subdir-action@develop
name: GitHub Actions Build and Deploy Demo
on:
  push
jobs:
  jekyll:
    runs-on: ubuntu-latest
    steps:
    - name: Copy repository contents
      uses: actions/checkout@main
      with:
        persist-credentials: false

    - name: Jekyll build
      uses: actions/jekyll-build-pages@v1
      with:
        source: .
        destination: ./_site
        future: false
        verbose: true
        token: $

    - name: Push to xx.github.io repo
      uses: s0/git-publish-subdir-action@develop
      env:
        REPO: git@github.com:$/$.github.io.git
        SQUASH_HISTORY: "false"
        BRANCH: master
        FOLDER: ./_site
        SSH_PRIVATE_KEY: $

上面提到的有一个全局变量:

  • ACTION_DEPLOY_KEY: 这个是当前A-repo的里面设置的token
  • repository_owner: 这个就是当前仓库的owner
  • SSH_DEPLOY_KEY: 这个比较重要,就是相当于一个私钥

对于最后一个私钥特别说明下,我当时想光有一个私钥有什么用?没有公钥的哇。后来才发现,任何一对私钥和公钥都可以,公钥添加到sshkey里面,私钥配置在当前A-repo下面即可;

创建github action

关于github action的基础用法,参见文档,不要看网上的一些文档,就官方就是最好,也是最新的;我在这里拆了一个坑;之前的教程branch可以是master,但是始终运行不起来,我都快放弃了,看了官方文档后,发现后来改为main了。

  • 注意触发的分支名称
  • 注意缩进

https://docs.github.com/en/actions/quickstart

下面这个例子:

name: GitHub Actions Demo #名称
on: [push]   # 触发条件是push
jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest # 运行依赖环境
    steps: # 步骤
      - name: Check out repository code # 步骤名称
        uses: actions/checkout@v3  # 依赖已有的actions,可以market里面找到很多有用的
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository  # 步骤名称
        run: | 
          ls $  # 运行bash脚本