如何设置 TeamCity 与 Cypress 配合使用,而无需为每次测试执行安装节点、xvfb、cypress

fla*_*085 5 teamcity docker docker-compose cypress

我想通过预定的计时器在 CI (Teamcity) 中运行我的 cypress.io 测试。测试将非常频繁地运行,这就是为什么我有兴趣尽快执行它们这是我当前的实现。我使用以下 docker-compose.yml 运行带有 3 个 teamcity-agents 的 teamcity-server


    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

Run Code Online (Sandbox Code Playgroud)

在构建步骤中,我在设置中使用节点:10.18.1,如下所示:

在此输入图像描述

我的建筑步骤现在如下:

1.

npm install yarn --no-save
yarn install --no-lockfile
Run Code Online (Sandbox Code Playgroud)
#!/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%"
Run Code Online (Sandbox Code Playgroud)
  1. 纱线生成:html:报告

这是我每次执行测试时都需要运行的,执行每个测试集大约需要 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"
  }
Run Code Online (Sandbox Code Playgroud)
  • apt-get install xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss3 libxss1 libasound2 (我需要为 Linux 额外安装) 我确实相信主要的严重依赖是 cypress 和 xvfb 软件包。

我发现有 3 种方法可以避免如此长的执行时间:

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

柏树/基地

赛普拉斯/浏览器

柏树/包括

但它们与 Teamcity 服务器不兼容(Teamcity 代理需要有一个 java 包装器)或者我不知道如何从 docker-compose.yml 运行它们我尝试了这个,但 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
Run Code Online (Sandbox Code Playgroud)
  1. 以某种方式缓存node_modules和xvfb。我看到https://cypress.slides.com/cypress-io/cypress-on-ci#/5/2/0但无法理解如何将其放入我的构建步骤中

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

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

欢迎任何建议

fla*_*085 2

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

我的主题中的 docker-compose.yml 是正确的。运行它购买

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

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

  1. 安装依赖项(当您需要更新依赖项时很少会运行)
  2. 运行测试(当您需要运行测试时将经常运行)

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

npm install yarn --no-save
yarn install --no-lockfile
Run Code Online (Sandbox Code Playgroud)

和每个屏幕的容器设置 在此输入图像描述 通过 node_modules => node_modules.zip 创建工件后

在第二个配置中设置依赖项,根据屏幕从第一个配置中获取node_modules 在此输入图像描述