在 CI 管道中运行开发服务器

une*_*eer 3 continuous-integration vue.js devops nuxt.js github-actions

我有一个使用 Github Action/Workflows 的 CI 管道设置,我想在其中运行 Cypress 自动化测试,但是我在如何运行我的开发服务器方面遇到了一些逻辑问题。让我向你展示我的管道

name: Nuxt CI Pipeline

on:
  push:
    branches: [ CI-pipeline ]
  # pull_request:
  #   branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [ 14.x ]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    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
Run Code Online (Sandbox Code Playgroud)

现在我想启动开发服务器并在该端口(通常是 3000 )上运行测试,但是问题是当npm run dev执行命令时,管道继续在那里等待并且不会向前移动,这是有道理的,因为开发服务器不会返回响应就像其他命令一样,所以它有点卡在那里。我对 DevOps 的了解是最低限度的,有人能指出我错过了什么吗?

Seb*_*arz 5

我认为执行方式并不理想,特别是因为节点服务器最终也没有被正确杀死。使用像start-server-and-test这样的帮助程序包应该可以解决你的问题:

npm install --save-dev start-server-and-test
Run Code Online (Sandbox Code Playgroud)

虽然我不确定你的脚本背后到底是什么package.json,但它最终可能看起来像这样:

  "scripts": {
    "start:ci": "<<start your dev server>>",
    "cy:run": "cypress run --browser chrome --headless",
    "cy:ci": "start-server-and-test start:ci http://localhost:3000 cy:run"
  }, 
Run Code Online (Sandbox Code Playgroud)

然后,您可以简单地将其作为管道中的单个命令运行npm run cy:ci。该脚本将负责启动您的开发服务器,等待 URL 可用,然后执行测试,所有测试完成后,它将关闭服务器。