使用GitLab配置项插接时,如何修复停靠容器中的'sh:TSC未找到'错误 [英] How to fix 'sh: tsc not found' error in docker container when using Gitlab CI docker-in-docker

查看:30
本文介绍了使用GitLab配置项插接时,如何修复停靠容器中的'sh:TSC未找到'错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为一个项目设置GitLab CI-in-docker。不幸的是,作业总是失败,因为在运行命令时似乎找不到已安装的NPM包。我收到的错误:

backend_1   | 
backend_1   | > tacta-backend@0.0.1 build /app
backend_1   | > tsc
backend_1   | 
backend_1   | sh: tsc: not found
backend_1   | npm ERR! file sh
backend_1   | npm ERR! code ELIFECYCLE
backend_1   | npm ERR! errno ENOENT
backend_1   | npm ERR! syscall spawn
backend_1   | npm ERR! tacta-backend@0.0.1 build: `tsc`
backend_1   | npm ERR! spawn ENOENT
backend_1   | npm ERR! 
backend_1   | npm ERR! Failed at the tacta-backend@0.0.1 build script.
backend_1   | npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
backend_1   | 
backend_1   | npm ERR! A complete log of this run can be found in:
backend_1   | npm ERR!     /root/.npm/_logs/2019-08-02T04_46_04_881Z-debug.log

奇怪的是,当我在不使用GitLab配置项的情况下手动运行docker-compose时,它确实可以工作。我的.gitlab-ci.yml是这样的:

build:
  variables:
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
  image: docker:18
  stage: build
  services:
    - docker:18-dind
  before_script:
    - docker info
    - apk add python-dev libffi-dev openssl-dev gcc libc-dev make
    - apk add py-pip
    - pip install docker-compose
  script:
    - docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

这是我的docker-compose.yml:

version: '3'
services:
  frontend:
    build:
      context: ./frontend
      args:
        NODE_ENV: production
        PGUSER: ${PGUSER}
        PGHOST: ${PGHOST}
        PGPASSWORD: ${PGPASSWORD}
        PGDATABASE: ${PGDATABASE}
        PGPORT: ${PGPORT}
        DATABASE_URL: ${DATABASE_URL}
    command: npm run build
    ports:
      - "9000:9000"
    volumes:
      - /app/node_modules
      - ./frontend:/app
  backend:
    build:
      context: ./backend
      args:
        NODE_ENV: production
    command: npm run build
    ports:
      - "3000:3000"
    volumes:
      - /app/node_modules
      - ./backend:/app

这是Dockerfile:

FROM node:11.10.1-alpine
ARG NODE_ENV
ARG PGUSER
ARG PGHOST
ARG PGPASSWORD
ARG PGDATABASE
ARG PGPORT
ARG DATABASE_URL
ENV NODE_ENV ${NODE_ENV}
ENV PGUSER ${PGUSER}
ENV PGHOST ${PGHOST}
ENV PGPASSWORD ${PGPASSWORD}
ENV PGDATABASE ${PGDATABASE}
ENV PGPORT ${PGPORT}
ENV DATABASE_URL ${DATABASE_URL}
WORKDIR '/app'
COPY ./package.json ./
RUN npm install
COPY ./ ./

我希望安装的软件包及其命令在停靠容器中可用。在某些情况下,它们起作用了,我不知道配置中的哪些更改导致了此问题。

我并不期待你们能提供复制/粘贴解决方案,但我真心希望你们能为我指明正确的方向,以便正确地找到问题的根源。

推荐答案

问题是我从NODE_ENV: development切换到NODE_ENV: production。在我的Package.json中启用了生产devDependencies的情况下,不再安装(废话)。

我将TypeScript和webpack添加到常规dependencies中,现在它又像魔咒一样工作了。

这篇关于使用GitLab配置项插接时,如何修复停靠容器中的'sh:TSC未找到'错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆