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)
这是我每次执行测试时都需要运行的,执行每个测试集大约需要 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)
我发现有 3 种方法可以避免如此长的执行时间:
柏树/基地
赛普拉斯/浏览器
柏树/包括
但它们与 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)
以某种方式缓存node_modules和xvfb。我看到https://cypress.slides.com/cypress-io/cypress-on-ci#/5/2/0但无法理解如何将其放入我的构建步骤中
在 TeamCity 中设置构建依赖项,并在一次构建中安装所有依赖项,并将工件(node_modules、xvfb 等)以某种方式移动到下一个构建,该构建将通过计时器运行测试。
我自己如何理解 cypress 文档,他们建议遵循我列表中的第 1 点,但如何作为 teamcity 代理运行他们的图像,我不明白
欢迎任何建议
回答我自己的问题。对于那些遇到同样问题的人来说,这是设置 Teamcity 和 Cypress 的优化方法:
我的主题中的 docker-compose.yml 是正确的。运行它购买
docker-compose up -d
Run Code Online (Sandbox Code Playgroud)
在 Teamcity 中设置 2 种不同的配置
在第一个配置中使用简单的 1 构建步骤
npm install yarn --no-save
yarn install --no-lockfile
Run Code Online (Sandbox Code Playgroud)
和每个屏幕的容器设置
通过 node_modules => node_modules.zip 创建工件后
在第二个配置中设置依赖项,根据屏幕从第一个配置中获取node_modules

| 归档时间: |
|
| 查看次数: |
4715 次 |
| 最近记录: |