在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
这曾经有效吗?从未
答案 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
参数完成脚本