docker Skaffold是否在使用被测映像构建的容器中运行测试?

rkkpypqq  于 2023-03-29  发布在  Docker
关注(0)|答案(2)|浏览(127)

为了确认skaffold.yaml中指定的测试是在容器中运行还是在本地运行,我打印了节点版本。

>node --version
v18.12.1

我在skaffold. yaml中运行了相同的命令。

apiVersion: skaffold/v4beta2
kind: Config
metadata:
  name: microservices-quiz-app
build:
  artifacts:
    - image: auth-img
      context: auth
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: src/**/*.js
            dest: .
test:
  - image: auth-img
    context: auth
    custom:
      - command: node --version
manifests:
  rawYaml:
  - auth/k8s/*.yml
  - ingress-srv.yml

文档中的措辞表明它是在本地运行的“It will run on the local machine”。documentation
如果我在skaffold dev之后直接连接到使用auth-img构建的容器,我会看到不同的版本。

有没有一种方法可以在一个容器中运行测试,并带有必要的依赖项(例如jest、supertest)来运行测试?
为什么斯卡福德不使用正在测试的图像;我们应该不包括开发依赖在图像?

FROM node:18-alpine
# ENV NODE_ENV=production

WORKDIR /app

COPY ["package.json", "package-lock.json*", "./"]

# RUN npm install --production
RUN npm install

COPY . .

# CMD ["npm", "start"]
CMD [ "npm", "run", "dev" ]
h22fl7wq

h22fl7wq1#

就我个人而言,我建议使用多阶段构建,这样你就不会被锁定在一个特定的工具中,比如Skaffold。

FROM node:18-alpine as builder

WORKDIR /app

COPY ["package.json", "package-lock.json*", "./"]

COPY src src  # this includes __tests__ folder

ENV CI=true
RUN npm ci  # this runs tests

FROM node:18-alpine
WORKDIR /app

COPY --from=builder ["/app/package.json", "/app/package-lock.json*", "./"]

COPY . .

ENV NODE_ENV=production
RUN npm ci --omit=dev

CMD ["npm", "run", "start"]
ycl3bljg

ycl3bljg2#

我们可以使用docker来使用生成的镜像运行一个容器。Skaffold提供了变量IMAGE

test:
  # auth
  - image: auth-img-dev
    context: auth
    custom:
      # run test in container
      - command: echo $IMAGE && docker run -e CI=true $IMAGE npm test

相关问题