在 CI 流水线中运行开发服务器并进行测试

64次阅读
没有评论

问题描述

在使用 Github Actions/Workflows 设置的 CI 流水线时,希望在运行 Cypress 自动化测试时能够同时启动开发服务器。然而,在尝试运行开发服务器时遇到了问题。下面是用户的流水线配置以及问题的详细描述。

name: Nuxt CI Pipeline
on:
  push:
    branches: [ CI-pipeline ]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [ 14.x ]
    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - name: Make envfile
      uses: SpicyPizza/create-envfile@v1
      with:
        envkey_ENV: staging
        file_name: .env
    - run: npm ci
    - run: npm run dev
    - run: |
         cd e2e
         ls -l
         npm ci
         npx cypress run

用户希望能够在运行 npm run dev 命令时启动开发服务器,并在通常情况下的端口 3000 上运行测试。然而,问题是当执行 npm run dev 命令时,流水线会一直等待,不会继续执行后续的命令,这是因为开发服务器不会返回响应,它会一直监听该端口,直到被显式关闭。用户希望得到帮助,了解如何解决这个问题。

解决方案

在你的情况下,你需要使用 Github Actions 中的服务容器(service containers)来解决这个问题。服务容器,也被称为 sidecars,将会与你的“主”流水线逻辑一起运行,并支持你的命令。在你的情况下,你将会在一个服务容器中运行 npm run dev,一旦构建任务开始执行,当 npx cypress run 命令执行时,它将会有一个可以连接的开发服务器。

以下是如何使用服务容器来修改你的流水线配置的示例。

name: Nuxt CI Pipeline
on:
  push:
    branches: [ CI-pipeline ]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [ 14.x ]
    container:
      image: node:${{ matrix.node-version }}
    services:
      dev-server:
        image: your_dev_server_image:latest
        ports:
          - 3000:3000
    steps:
    - uses: actions/checkout@v2
    - name: Make envfile
      uses: SpicyPizza/create-envfile@v1
      with:
        envkey_ENV: staging
        file_name: .env
    - run: npm ci
    - run: npm run dev
    - run: |
         cd e2e
         ls -l
         npm ci
         npx cypress run

在上面的示例中,我们对流水线配置进行了修改,以便使用服务容器来运行开发服务器。首先,在 jobs 下的 build 作业中,我们添加了一个 container 部分,指定了 Node.js 的版本。然后,我们使用 services 部分来定义一个名为 dev-server 的服务容器,使用你的开发服务器镜像,并将端口映射设置为 3000:3000,以便能够在流水线中访问开发服务器。

接着,你可以在流水线中的步骤中继续运行你的命令,包括 npm run devnpx cypress run

这样,当流水线执行到 npm run dev 时,开发服务器将在服务容器中启动,并且在运行 npx cypress run 时,你将能够连接到这个开发服务器进行测试。

希望这个解决方案能够帮助你在 CI 流水线中成功运行开发服务器并进行测试。如果你需要更多关于服务容器的信息,可以查阅 Github Actions 的文档

正文完