Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 如何设置TeamCity与Cypress一起工作,而无需为每次测试执行安装node、xvfb和Cypress_Docker_Docker Compose_Teamcity_Cypress - Fatal编程技术网

Docker 如何设置TeamCity与Cypress一起工作,而无需为每次测试执行安装node、xvfb和Cypress

Docker 如何设置TeamCity与Cypress一起工作,而无需为每次测试执行安装node、xvfb和Cypress,docker,docker-compose,teamcity,cypress,Docker,Docker Compose,Teamcity,Cypress,我想按计划的计时器在CI(Teamcity)中运行cypress.io测试。测试将非常频繁地运行,这就是为什么我有兴趣尽可能快地执行它们 这是我当前的实现。 我使用以下docker-compose.yml与3个teamcity代理一起运行teamcity server version: "3" services: server: image: jetbrains/teamcity-server:2020.1.2 p

我想按计划的计时器在CI(Teamcity)中运行cypress.io测试。测试将非常频繁地运行,这就是为什么我有兴趣尽可能快地执行它们 这是我当前的实现。 我使用以下docker-compose.yml与3个teamcity代理一起运行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

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

我的建筑步骤如下:

一,

  • 生成: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"
      }
    
    • apt get install xvfb libgtk-3-dev libnotify dev libgconf-2-4 libnss3 libxss1 libasound2(我需要为linux额外安装) 我相信主要的重依赖是cypress和xvfb包
    我看到了3种方法来避免如此巨大的执行时间:

  • 要使docker映像与teamcity兼容,其中包含所有cypress ENV:node、cypress、xvfb等。在这种情况下,我不需要每次运行测试时都安装它。我一直在关注cypress文档,并意识到docker的特殊图像就是为此而设计的
  • 柏树/底座

    cypress/浏览器

    柏树/包括在内

    但是它们与Teamcity服务器不兼容(Teamcity代理需要一个java包装器),或者我不知道如何从docker-compose.yml运行它们 我尝试了此操作,但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-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
    
  • 以某种方式缓存节点_模块和xvfb。我明白了,但不明白如何把它放在我的建筑台阶上

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

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


    欢迎提出任何建议

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

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

    docker-compose up -d
    
    在Teamcity中设置2种不同的配置

  • 安装依赖项(在需要更新依赖项时很少运行)
  • 运行测试(需要运行测试时将经常运行)
  • 在第一个配置中,使用简单的1构建步骤

    npm install yarn --no-save
    yarn install --no-lockfile
    
    和容器设置符合屏幕要求 在创建工件之后 node_modules=>node_modules.zip

    在第二个配置设置依赖项中,根据屏幕从第一个配置获取节点_模块

    docker-compose up -d
    
    npm install yarn --no-save
    yarn install --no-lockfile