在 Google Cloud Build 中运行 Cypress

use*_*214 1 google-cloud-platform cypress google-cloud-build

我需要在 Google Cloud Build 中运行 cypress e2e 测试。当我刚刚运行时,出现错误,需要安装 cypresses依赖项id: End to End Test。因此,我尝试下载依赖项,但发生了这种情况:

E: Unable to locate package libasound2'
E: Unable to locate package libxss1
E: Unable to locate package libnss3
E: Unable to locate package libgconf-2-4
E: Unable to locate package libnotify-dev
E: Couldn't find any package by regex 'libgtk2.0-0'
E: Couldn't find any package by glob 'libgtk2.0-0'
E: Unable to locate package libgtk2.0-0
E: Unable to locate package xvfb
Reading state information...
Building dependency tree...
Reading package lists...
Status: Downloaded newer image for ubuntu:latest
Digest: sha256:eb70667a801686f914408558660da753cde27192cd036148e58258819b927395
latest: Pulling from library/ubuntu
Using default tag: latest
Pulling image: ubuntu
Run Code Online (Sandbox Code Playgroud)

如何在 Google Cloud Build 中运行 cypress?

cloudbuild.yaml

steps:
    ... npm setup ...
    - name: 'ubuntu'
      id: Install Cypress Dependencies
      args:
          [
              'apt-get',
              'install',
              'xvfb',
              'libgtk2.0-0',
              'libnotify-dev',
              'libgconf-2-4',
              'libnss3',
              'libxss1',
              libasound2',
          ]
    - name: 'gcr.io/cloud-builders/npm:current'
      id: End to End Test
      args: ['run', 'e2e:gcb']
Run Code Online (Sandbox Code Playgroud)

小智 5

因此,您所拥有的问题是步骤应该彼此隔离。运行有效,但当您尝试安装所需的依赖项apt-get update时不会持续存在。在步骤之间仅保留apt-get项目目录(默认为 )中的数据。/workspace

我没有尝试找出解决方法,而是使用Cypress Docker 映像成功让 Cypress 在 Google Cloud Build 中运行。workspace需要注意的一件事是,在此步骤中您还必须将 Cypress 安装缓存在文件夹内npm install。您可能还想将该.tmp目录添加到您的.gcloudignore

  - name: node
    id: Install Dependencies
    entrypoint: yarn
    args: ['install']
    env:
      - 'CYPRESS_CACHE_FOLDER=/workspace/.tmp/Cypress'
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样运行测试

  - name: docker
    id: Run E2Es
    args:
      [
        'run',
        '--workdir',
        '/e2e',
        '--volume',
        '/workspace:/e2e',
        '--env',
        'CYPRESS_CACHE_FOLDER=/e2e/.tmp/Cypress',
        '--ipc',
        'host',
        'cypress/included:3.2.0'
      ]
Run Code Online (Sandbox Code Playgroud)

或者,如果您想运行自定义命令而不是默认命令cypress run,您可以这样做

  - name: docker
    id: Run E2Es
    args:
      [
        'run',
        '--entrypoint',
        'yarn',
        '--workdir',
        '/e2e',
        '--volume',
        '/workspace:/e2e',
        '--env',
        'CYPRESS_CACHE_FOLDER=/e2e/.tmp/Cypress',
        '--ipc',
        'host',
        'cypress/included:3.2.0',
        'e2e',
      ]
Run Code Online (Sandbox Code Playgroud)

让我们来分解一下......

  • name: docker告诉 Cloud Build 使用Docker Cloud Builder
  • --workdir /e2e告诉 docker 在运行期间使用/e2e容器中的目录
  • --volume /workspace:/e2e/e2edocker使用的工作目录指向/workspacecloud build使用的工作目录
  • --env CYPRESS_CACHE_FOLDER=/e2e/.tmp/Cypress告诉 cypress 指向/e2e/.tmp/CypressCypress 缓存。
  • --ipc host修复了 Cypress 在测试运行期间崩溃的问题
  • cypress/included:3.2.0Cypress Docker 镜像,其中包括 cypress 和浏览器

如果您正在运行自己的脚本:

  • --entrypoint yarn覆盖 Dockerfile 中的默认入口点cypress/included(记住,是cypress run
  • e2e是您想要运行 e2es 的脚本

希望这可以帮助!我花了一个多星期的时间试图让它发挥作用,所以我想我可以帮助其他面临同样问题的人:)