如何设置 TeamCity 以与 Cypress 一起工作,而无需为每次测试执行安装节点、xvfb、cypress

How to setup TeamCity to work with Cypress without installation of node, xvfb, cypress for each test execution

我想 运行 我的 cypress.io 测试在 CI (Teamcity) 中按预定的计时器进行。测试将 运行 非常频繁,这就是为什么我有兴趣尽快执行它们 这是我目前的实施。 我 运行 teamcity-server 与 3 个 teamcity-agents 具有以下 docker-compose.yml


    version: "3"
    services:
      server:
        image: jetbrains/teamcity-server:2020.1.2
        ports:
          - "8112:8111"
        volumes:
          - ./data_dir:/data/teamcity_server/datadir
          - ./log_dir:/opt/teamcity/logs
      teamcity-agent-1:
        image: jetbrains/teamcity-agent:2020.1.2-linux-sudo
        environment:
          - SERVER_URL=http://server:8111
          - AGENT_NAME=docker-agent-1
          - DOCKER_IN_DOCKER=start
        privileged: true
        container_name: docker_agent_1
      teamcity-agent-2:
        image: jetbrains/teamcity-agent:2020.1.2-linux-sudo
        environment:
          - SERVER_URL=http://server:8111
          - AGENT_NAME=docker-agent-2
          - DOCKER_IN_DOCKER=start
        privileged: true
        container_name: docker_agent_2
      teamcity-agent-3:
        image: jetbrains/teamcity-agent:2020.1.2-linux-sudo
        environment:
          - SERVER_URL=http://server:8111
          - AGENT_NAME=docker-agent-3
          - DOCKER_IN_DOCKER=start
        privileged: true
        container_name: docker_agent_3

在构建步骤中,我在设置中使用 node:10.18.1,如下面的屏幕所示: enter image description here

我的建筑步骤如下:

1.

npm install yarn --no-save
yarn install --no-lockfile
#!/bin/bash
set -e -x
export CYPRESS_CACHE_FOLDER="%env.cypress_cache_path%"
export CYPRESS_VAR1=%env.var1%
export CYPRESS_VAR2=%env.var2%

apt-get update && apt-get -y install libgtk2.0-0 libgtk-3-0 libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 libxtst6 xauth xvfb

yarn silent --spec "%env.cypress_path_to_landing_pages%"
  1. 纱线generate:html:report

这是我每次执行测试都需要 运行,执行每个测试集需要大约 10 分钟,安装所有依赖项需要 60-70% 的时间

  {
    "@types/mocha": "^8.0.0",
    "cypress": "4.11.0",
    "cross-env": "^7.0.2",
    "mocha": "^7.2.0",
    "mochawesome": "^6.1.1",
    "mochawesome-merge": "^4.1.0",
    "mochawesome-report-generator": "^5.1.0",
    "typescript": "^3.9.6"
  }

我看到了 3 种方法来避免这种巨大的执行时间:

  1. 拥有一个与 teamcity 兼容的 docker 图像,其中包含所有 cypress ENV:node、cypress、xvfb 等。在这种情况下,我不需要在每次 运行 测试时都安装它。我正在关注柏树文档并意识到特殊的 docker 图像是为此设计的 https://github.com/cypress-io/cypress-docker-images

cypress/base

cypress/browsers

cypress/included

但是它们与 Teamcity 服务器不兼容(Teamcity 代理需要有一个 java 包装器)或者我不知道如何从 docker-[=74= 运行 它们] 我试过了,但是 TeamCity 服务器找不到这个代理,代理选项卡是空的

version: "3"
services:
  server:
    image: jetbrains/teamcity-server:2020.1.2
    ports:
      - "8112:8111"
    volumes:
      - ./data_dir:/data/teamcity_server/datadir
      - ./log_dir:/opt/teamcity/logs
  teamcity-agent-2:
    image: cypress/included:3.4.0
    environment:
      - SERVER_URL=http://server:8111
      - AGENT_NAME=docker-agent-2
      - DOCKER_IN_DOCKER=start
    privileged: true
    container_name: docker_agent_2
  1. 以某种方式缓存node_modules和xvfb。我看到 https://cypress.slides.com/cypress-io/cypress-on-ci#/5/2/0 但无法理解如何将其放入我的构建步骤中

  2. 在 TeamCity 中设置构建依赖项并在一次构建中安装所有依赖项并将工件(node_modules、xvfb 等)以某种方式移动到下一个构建,这将 运行 由计时器测试.

我自己是如何理解赛普拉斯文档的,他们建议遵循我列表中的第 1 点,但是如何 运行 他们作为 teamcity 代理的图像我不明白

欢迎提出任何建议

回答我自己的问题。对于那些遇到同样问题的人来说,这是设置 Teamcity 和 Cypress 的优化方法:

我的docker-compose.yml题目是正确的。 运行买

docker-compose up -d

在 Teamcity 中设置 2 个不同的配置

  1. 安装依赖项(当你需要更新依赖项时运行很少见)
  2. 进行 运行 测试(当您需要 运行 测试时,通常会 运行)

在第一个配置中使用简单的 1 个构建步骤

npm install yarn --no-save
yarn install --no-lockfile

和容器设置根据屏幕 在创建工件之后 node_modules => node_modules.zip

在第二个配置中根据屏幕从第一个配置中获取 node_modules 依赖项