利用 GitHub Action 对项目进行自动部署

说一下项目背景,这是一个基于 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 确实可以操练起来 😘

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值