我有一个Dockerized Typescript NodeJS应用程序,我想从Gitlab CI构建Docker映像。
Dockerfile
FROM node:11.13.0-alpine
WORKDIR /usr/src/app/
COPY . .
RUN npm install
RUN npm run build
CMD ["node", "dist/main.js"]
.gitlab-ci.yml
image: ubuntu:bionic
stages:
- deploy
before_script:
# OS dependencies
- apt-get update
- apt-get install -y gnupg2
- apt-get install -y software-properties-common
# Install docker
- apt install -y docker.io
- service docker start
# Install cURL
- apt-get install -y curl
deploy:
stage: deploy
script:
- docker build -t my_app .
# more stuff
如果我在本地的 Mac OS 中运行docker build -t my_app .
,一切正常。但是在Gitlab CI( Ubuntu )中,它会在步骤RUN npm run build
中引发这些错误:
src/contact/contact.mapper.ts(1,25): error TS2307: Cannot find module './contact'.
src/contact/contact.repository.ts(2,25): error TS2307: Cannot find module './contact'.
src/contact/contact.resolver.ts(3,25): error TS2307: Cannot find module './contact'.
...
Docker版本在Gitlab CI和我的本地版本中相同。我是否需要其他东西才能使其在Ubuntu中运行(Gitlab CI运行器映像)?
注意:我知道Docker中的Docker可以在Gitlab CI中使用,但是由于某些原因,我需要手动安装Docker。
修改
此外,如果我在本地运行npm run build
(使用Node v11.13.0,与Dockerfile相同的版本),它也可以工作。
编辑
我刚刚在Ubuntu计算机(使用Vagrant虚拟机)中运行docker built -t my_app .
,但是它不起作用。因此,绝对该错误与操作系统有关。它可以在Mac OS上运行,但不能在Ubuntu上运行。
答案 0 :(得分:0)
最后,我发现了错误。文件实际上被命名为Contact.ts
,而不是contact.ts
。似乎在Mac OS中,与Ubuntu不同,路径不区分大小写。