说一下项目布景,这是一个根据 Docusaurus 建立的个人博客平台:Yopth.github.io

⚛️ Docusaurs 是一个优秀的建立网站结构,根据 React 和 MDX,插件化、国际化、SEO 等做的都很不错,有需要建立网站的同学能够考虑。

该网站利用 GitHub Pages 布置,这个方法也是 Docusaurus 所支撑的,详见:Deploying to GitHub Pages。

利用 Docusaurus 的能力,咱们能够运转 yarn deploy 指令去把咱们的项目代码布置到 GitHub Pages 上去,可是每一次布置都需要手动,很麻烦。利用 GitHub Action 能够主动化布置作业流。

这是来自 GitHub 官网的介绍,GitHub Action 其实便是一套 CI/CD,接下来咱们来看下 GitHub 是如何界说这套 CI/CD 规则的。

CI/CD, Continuous Integration / Continuous Delivery, 继续集成 / 继续交付,即通过构建主动化的发布布置流程,将功能快速交付到用户手上。

GitHub Action 有 5 个重要的概念。

第一个是 workflow,即作业流,作业流界说了布置的流程,直观来看,一切作业流界说在项目中的 .github 下的 workflows 文件夹中,每一个作业流便是一个 .yaml 文件。

第二个是 Event,即事情。就像设置一个按钮一样,只有当用户点击这个按钮的时候,事情才会被触发。

事情也便是一个 Action 的起点,常见的事情比如有创立 Pull Request,打开一个新 isuue,推送代码到库房,还有调用 GitHub 的 API,当然,也能够手动触发事情。

第三是 Runner。一个作业流不会平白无故地运转,它肯定会有一个依托的环境,这个环境便是 Runner。公开库房每个月能够白嫖 2000 分钟,超出就要收费了。

第四是 Job,Job 便是 workflow 上细化出来的作业过程,相当于流水线上的工人。Job 能够是脚本代码,也能够是接下来要讲到的 Action。

多个 Job 会并行执行,当 Job 之间存在依靠的话,那么就会根据依靠串行执行,并且由于这些 Job 是在同一个 Runner 运转,那么发生的数据是能够同享的。

最终是 action,实际上也便是可复用的 workflow。很容易幻想得到,当咱们自己的有两个项目,界说的 workflow 都一样,那么重复写两次代码肯定没必要。

如何创立 workflow,以官网比如来说:

首先咱们在项目根目录创立 .github > workflows > deploy.yaml 这儿的文件层级目录。

接着修改 deploy.yaml 文件

name: learn-github-actions
on: [push]
jobs:
  check-bats-version:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '14'
      - run: npm install -g bats
      - run: bats -v
  1. name:整个 workflow 的姓名,可选。
  1. on: [push]:workflow 触发的事情,push 表示当推送代码到库房的时候触发。
  1. jobs:界说一切的 job,这儿只有一个 job。
  1. check-bats-version:job 的名称。
  1. runs-on: ubuntu-latest:界说 runner 的环境。
  1. steps:界说 job 的每一个过程。
  1. uses: actions/checkout@v3:这儿便是一个复用的 action,它会把库房代码检出到 runner 中。
  1. actions/setup-node@v3:这儿也是一个复用的 action,它的作用是安装一个指定版别的 node。
  1. run: npm install -g bats:全局安装 bats 依靠 npm 包
  1. bats -v:运转 bats 指令,输出版别。

当推送到 GitHub 库房上去之后,会主动触发 Action:

能够看到咱们界说的 workflow:

能够看到咱们的 yaml 文件:

点击进去能够检查 Action 运转的成果:


也能够检查 Job 的执行日志:

学习了 GitHub Action,那么接下来便是为 Yopth 网站创立一个 yaml 文件:

name: Deploy to GitHub Pages
on:
  push:
    branches:
      - main
jobs:
  deploy:
    name: Deploy to GitHub Pages
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v3
        with:
          node-version: 18
          cache: yarn
      - name: Install dependencies
        run: yarn install --frozen-lockfile
      - name: Build website
        run: yarn build
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.TOKEN }}
          publish_dir: ./build
          user_name: Penggeor
          user_email: wkpcoder@163.com

这儿咱们使用 Docusaurus 官方推荐的 Action 装备。这儿有一个 secrets.TOKEN,TOKEN 这种属于私密常量,肯定是不能直接明文暴露在代码中,咱们能够在安排的设置中去创立这样的私密常量:

通过装备这样简略的 yaml 文件,就完成一个简易好用的 CI/CD,下次只需要推送代码到 main 分支,即可触发 GitHub Pages 的重新布置。GitHub Action 确实能够练习起来 😘