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
参数来完成脚本
在 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
参数来完成脚本