我想cypress.io在CI(Teamcity)中按计划的计时器运行www.example.com测试。测试将非常频繁地运行,这就是为什么我希望尽快执行它们。这是我当前的实现。我运行带有3个teamcity-agent的teamcity-server,带有以下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
在构建步骤中,我在设置中使用节点:10.18.1,如下图所示:
我的建筑步骤如下:
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.Yarn生成: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"
}
- apt-get install xvfb libgtk-3-dev libnotify-dev libgconf-2-4 libnss 3 libxss 1 libasound 2(我需要为linux安装额外的)我相信主要的严重依赖是cypress和xvfb包。
我认为有3种方法可以避免这种巨大的执行时间:
1.要使docker映像与包含所有cypress ENV的teamcity兼容:node、cypress、xvfb等。在这种情况下,我不需要在每次运行测试时都安装它。我遵循cypress文档,并意识到特殊的docker映像是为https://github.com/cypress-io/cypress-docker-images设计的
柏树/底座
Cypress/浏览器
柏树/包括
但它们与Teamcity服务器不兼容(Teamcity代理需要有一个java Package 器),或者我不知道如何从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
1.以某种方式缓存node_modules和xvfb。我看到https://cypress.slides.com/cypress-io/cypress-on-ci#/5/2/0,但不明白如何将其放入我的构建步骤
1.在TeamCity中设置构建依赖项,在一个构建中安装所有依赖项,并以某种方式将工件(node_modules、xvfb等)移动到下一个构建,该构建将通过计时器运行测试。
我自己是如何理解Cypress文档的,他们建议按照我列表中的第1点操作,但我不明白如何作为TeamCity代理运行他们的映像
欢迎提出任何建议
1条答案
按热度按时间2lpgd9681#
回答我自己的问题。对于那些谁陷入了相同的这是一个优化的方式来设置Teamcity和Cypress:
我的docker-compose.yml从这主题是正确的.运行它买
在Teamcity中设置2种不同的配置
1.安装依赖项(在需要更新依赖项时很少运行)
1.运行测试(在需要运行测试时经常运行)
在第一个配置中,使用简单的1构建步骤
通过node_modules =〉node_modules.zip创建工件后,按照屏幕x1c 0d1x进行容器设置
在第二个配置中,根据屏幕
设置从第一个配置获取node_modules的依赖性