npm 脚本在 Concourse 上无限期挂起 CI

npm scripts hang indefinitely on Concourse CI

在 Concourse 上,我正在 运行ning 集成测试,其中我 运行 某些 npm 脚本。有一个特定的脚本可以构建我的 backend/frontend 然后继续进行 运行 测试。但是一旦测试完成(失败或成功)。 npm 脚本不会停止。当测试失败或成功时,它不会出错并无限期地挂起。我在本地机器和本地容器上有 运行 这个脚本,npm 脚本工作正常。仅在 Concourse 上,脚本永远挂起。

为了给我的设置提供更多上下文,这里是前端 运行 上的 npm 脚本示例

"ci:start:backend": "npm run --prefix ../emailservice/mock-service dev & npm run --prefix ../server-repo ci:start:server & sleep 3"

"ci:test:system": "npm run ci:start:backend && npm run build:dist:serve & sleep 90 && npm run test:browser:ci"

npm run ci:test:system是运行的主要脚本。它的作用 它将同时启动 运行 电子邮件服务、服务器和前端,以便 运行 进行测试。这是一种混乱的做事方式,但它适用于本地和容器。此方法已用于服务器测试的类似测试,运行在大厅很好。

pipeline的任务可以看下面

# runs unit tests for frontend
  - name: run-tests
    plan:
    - get: frontend-repo
    - get: server-repo
    - get: emailservice
    - task: run-npm-tests
      privileged: true
      config:
        platform: linux
        image_resource:
          type: docker-image
          source:
            repository: jonoc/techradar-integration
        inputs:
          - name: frontend-repo
          - name: server-repo
          - name: emailservice
        run:
          path: sh
          args:
          - -exc
          - |
            mongod --fork --logpath /var/log/mongodb.log
            export SHELL=/bin/bash

            cd server-repo
            npm install --silent

            cd ../emailservice/mock-service
            npm install --silent

            cd ../../frontend-repo
            npm install --silent

            npm rebuild node-sass --silent
            npm run postinstall --silent
            npm run ci:test:system

一切似乎都没有异常,但大厅拒绝提供绿色或红色建筑。我怀疑这是由于其他脚本永远 运行 但挂在后台并且大厅不想结束。然而 运行ning npm 运行 ci:start:backend 在 concourse 中可以正常工作,但是 运行ning npm 运行 test:browser:ci 将永远挂起,这进一步增加了混乱有什么问题。

大厅version:3.3.2

部署类型(BOSH/Docker/binary):Docker

Infrastructure/IaaS:AWS/EC2

浏览器(如果适用):Chrome

这曾经有效吗?从不

您确定您的资源在任务 docker 容器中可用吗?

您在此处指定多个输入

 - name: frontend-repo
 - name: server-repo
 - name: emailservice

但是,如果您有多个输入,则 concourse 要求您为每个输入指定正确的路径。

执行后尝试劫持任务容器,查看资源是否可用。也可以在容器中执行脚本,方便调试。

fly -t <your_target> hijack -j demo_job/demo_task

我的问题已通过更改 npm 脚本得到解决。事实证明,与其他脚本链接 npm run --prefix ../emailservice/mock-service dev & npm run --prefix ../server-repo ci:start:server & sleep 3 会导致 Concourse 出现一些问题。

我修改了 npm 脚本以使用 npm-run-all 并在我的测试完成后使用 -r 参数来完成脚本