前端需要知道的CI / CD知识不完全指北(二)

189 阅读2分钟

这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

前端需要知道的CI / CD知识不完全指北(二)

本系列主要介绍 利用Git Action 实现 CI/CD 流程, 涉及到的知识点包括 CI/CD Github actions Docker Docker-compose, 实现使用Github action Docker / Docker compose 自动发布代码到测试机

如何使用 Github Actions 做自动化测试?

# /.github/workflows/test.yml
# 自动化测试
name: test
 
on: # 触发条件
  push: # 项目 git push 的时候触发
    branches: [ master ] # 在 master 分支 push的时候触发
    paths: # [触发条件] push的文件在这个范围之内触发
      - '.github/workflows/**'
      - '__test__/**'
      - 'src/**'

jobs: # 任务
    test: # 任务1 test
        runs-on: ubuntu-latest # 在 ubuntu系统的基础上运行
        steps: # 步骤 steps, 可自定义也可以使用第三方
            # Step 1 直接使用 uses 第三方,
            - uses: actions/checkout@v2 #  意思是 git pull 获取当前最新代码
            # Step 2 使用 name 和 uses 第三方
            - name: Use Node.js #  name: step 名称
              uses: actions/setup-node@v1 # 第三方 actions , 安装nodejs并指定版本号
              with:
                  node-version: 16
            # Step 3 使用 name
            - name: Lint and test
              run: |        # RUN 自定义的命令
                  npm i
                  npm run lint
                  npm run test:remote

失败如何处理

image-20211118142432315.png

点击re-rull all jobs 重新执行

测试流程

  • pre-commit 时执行本地接口测试 npm run test:local
  • master push 时执行远程接口测试 npm run test:remote

Github Actions部署文件到服务器

github.com/easingtheme…

在服务器生成秘钥

配置 env 变量

ssh-keygen -m PEM -t rsa -b 4096
配置 TARGETREMOTE_HOST REMOTE_USER REMOTE_PORT ARGS SOURCE``EXCLUDE

Use the latest version from Marketplace,eg: ssh-deploy@v2 or use the latest version from a branch, eg: ssh-deploy@main

  - name: Deploy to Staging server
    uses: easingthemes/ssh-deploy@main
    env:
      SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
      ARGS: "-rltgoDzvO"
      SOURCE: "dist/"
      REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
      REMOTE_USER: ${{ secrets.REMOTE_USER }}
      TARGET: ${{ secrets.REMOTE_TARGET }}
      EXCLUDE: "/dist/, /node_modules/"

示例

name: Node CI

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - name: Install Node.js
      uses: actions/setup-node@v1
      with:
        node-version: '10.x'
    - name: Install npm dependencies
      run: npm install
    - name: Run build task
      run: npm run build --if-present
    - name: Deploy to Server
      uses: easingthemes/ssh-deploy@main
      env:
          SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
          ARGS: "-rltgoDzvO --delete"
          SOURCE: "dist/"
          REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
          REMOTE_USER: ${{ secrets.REMOTE_USER }}
          TARGET: ${{ secrets.REMOTE_TARGET }}
          EXCLUDE: "/dist/, /node_modules/"