手把手带你搭建一个CI/CD工作流

0 阅读4分钟

概念

CI:持续集成,开发人员频繁合并将代码变更合并到主干,每次合并触发自动化构建和测试流程

CD:持续交付和部署,持续交付保证代码可以随时安全部署到生产环境,后者自动将变更部署到生产环境

image.png

准备工作

初始化项目,安装eslint代码检查

npm i eslint --save-dev
npm i eslint -D
--save-dev简写为-D,意思为仅开发构建时需要的包,上线后不需要

初始化eslint检查规则

需要eslint检查并找到代码不规范的问题

在package.json中配置eslint命令,后续CI/CD流会执行命令检查代码

这些后缀的文件需要检查,--fix自动修复错误

创建github或gitlab远程仓库

接下来是Github actions操作步骤:

在本地文件夹创建.github文件夹,进入文件夹,创建workflows文件夹,GitHub Actions 会自动识别项目根目录下 .github/workflows/ 文件夹中的 YAML 文件(后缀.yml/.yaml),创建工作流文件,可以自定义命名,后缀必须是yml

文件内容

# 工作流名称,GitHub页面会显示这个名字,自定义即可
name: Frontend CI/CD Workflow
# 触发条件:哪些操作会启动这个CI/CD工作流
on:
  # 1. 推送到main分支时触发(GitHub默认主分支,老版本是master,改这里要和自己的分支一致)
  push:
    branches: [ main ]
  # 2. 手动在GitHub页面触发(可选,方便测试,不用每次都提交代码)
  workflow_dispatch:

# 工作流的执行任务,一个jobs可以包含多个step(步骤)
jobs:
  # 任务名称:构建和部署(自定义)
  build-and-deploy:
    # 运行的服务器环境:GitHub提供的Ubuntu最新版(企业常用Linux,Windows/macOS可换,见注释)
    runs-on: ubuntu-latest
    # 任务的具体步骤,按顺序执行,一步失败则整个工作流终止
    steps:
      # 步骤1:拉取GitHub仓库中的代码到CI服务器(官方action,直接用)
      - name: Checkout code
        uses: actions/checkout@v4

      # 步骤2:安装Node.js环境(官方action,指定LTS版本,和本地一致)
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20 # 选Node.js LTS版本,比如18/20,本地node -v看自己的版本
          cache: 'npm' # 缓存npm依赖,提升下次CI速度(核心优化,企业必加)

      # 步骤3:安装项目依赖(和本地执行npm install一样)
      - name: Install dependencies
        run: npm install # 若用yarn/pnpm,改这里为yarn install / pnpm install

      # 步骤4:CI核心-执行ESLint代码检查(前面配置的npm run lint)
      - name: Lint code with ESLint
        run: npm run lint # 有语法/规范错误则直接失败,终止后续步骤

      # 步骤5:CI核心-构建前端项目(生成静态dist目录)
      - name: Build project
        run: npm run build # Vite/Vue-CLI/Create-React-App都是这个命令,生成dist目录

      # 步骤6:CD核心-将构建后的dist目录部署到GitHub Pages(官方+社区成熟action,直接用)
      - name: Deploy to GitHub Pages
        uses: peaceiris/actions-gh-pages@v4 # 稳定的部署action,企业常用
        with:
          # 部署的源文件目录:项目构建后的dist目录(固定,和本地build结果一致)
          publish_dir: ./dist
          # 自动生成的Git提交信息,自定义即可
          commit_message: 'ci: auto deploy [skip ci]'
          # 部署的密钥:GitHub自动生成的TOKEN,无需手动填,后续配置权限会自动注入
          github_token: ${{ secrets.GITHUB_TOKEN }}

将新增的工作流文件推送到远程仓库

配置GitHub pages

CD操作将构建后的dist文件部署到GitHub Pages,配置完成后将生成公共访问地址https://你的用户名.github.io/仓库名/

设置从分支构建,设置分支为gh-pages目录为root(第一次可能会没有这个分支,可以先设置为main,触发CI/CD工作流后创建这个分支再回来修改,不过一定要记得修改),否则可能会找不到文件

触发CI/CD流

由于设置的CI/CD流的触发方式是推送代码,因此直接推送代码就能触发,如果失败检查失败原因,重新运行

可能出现的问题

需要在GitHub打开工作流可写权限

添加资源的base路径