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

时间:2017-08-09 22:57:41

标签: node.js amazon-web-services npm concourse

在Concourse上,我正在运行集成测试,我运行某些npm脚本。有一个特定的脚本构建我的后端/前端,然后继续运行测试。但是一旦测试完成(失败或成功)。 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是运行的主要脚本。它的作用是为了运行测试,它将立即开始运行电子邮件服务,服务器和前端。这是一种混乱的做事方式,但它适用于本地和容器。这种方法已经针对服务器测试的类似测试完成,并且在大厅上正常运行。

管道的任务可以在下面看到

# 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

一切似乎并非与众不同,但大厅拒绝透露绿色或红色。我怀疑这是由于其他脚本永远运行但挂在后台并且大厅不想结束。然而运行npm run ci:start:backend在concourse中工作正常,但运行npm run test:browser:ci将永远挂起,这进一步增加了混乱的问题。

大厅版本:3.3.2

部署类型(BOSH / Docker /二进制):Docker

基础设施/ IaaS的:AWS / EC2

浏览器(如果适用):Chrome

这曾经有效吗?从未

2 个答案:

答案 0 :(得分:0)

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

您在此指定多个输入

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

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

尝试在执行后劫持任务容器并检查资源是否可用。您还可以在容器中执行脚本,以便更轻松地调试它。

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

答案 1 :(得分:0)

通过更改我的npm脚本解决了我的问题。原来用其他脚本链接npm run --prefix ../emailservice/mock-service dev & npm run --prefix ../server-repo ci:start:server & sleep 3会导致Concourse出现一些问题。

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