【问题标题】:How to automate CI/CD pipeline unit tests for a node.js container deployment in kubernetes如何为 kubernetes 中的 node.js 容器部署自动化 CI/CD 管道单元测试
【发布时间】:2022-12-10 08:14:17
【问题描述】:

在将 node.js 容器部署到本地 kubernetes 集群之前,我试图自动化单元测试。我不清楚是否需要在我的deployment.yamlDockerfilepackage.json 或它们的组合中进行配置。并且一旦配置好如何指示 Kubernetes 在部署之前输出任何故障并退出。

我需要按照this SO answer的建议写一个shell脚本修改环境变量吗?或者,这是我可以用 Kubernetes deployment.yaml 自动化的东西吗?

如果它有用,我正在使用mochachai。这是从 Google Cloud Source Repositories 部署到本地 Kubernetes 实例。

由于我是 Kubernetes 的新手,所以尽可能多地了解细节会很棒。

这是我的deployment.yaml


apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image
          imagePullPolicy: IfNotPresent

这是我的Dockerfile

# Use base node 18-alpine image from Docker hub
FROM node:18-alpine

WORKDIR /MY_APP

# Copy package.json and install dependencies
COPY package*.json ./
RUN npm install

# Copy rest of the application source code
COPY . .

# Run index.js
ENTRYPOINT ["node", "src/index.js"]

这是我的package.json

  "scripts": {
    "start": "node src/index.js",
    "test": "npm install mocha -g && mocha --timeout 4000 --exit"
   }

这是我用来试验的基本单元测试:

import { expect } from 'chai'

describe('Basic unit test', ()=>{
    it('Checks if 3*3=9', () => {

        expect(3*3, 9)
    })
})

【问题讨论】:

  • 如果您有 CI/CD 管道,则可以在管道中配置它。如果您使用的是 GitHub,这将是 GitHub Actions/Workflows
  • 您需要先运行单元测试,然后构建并推送您的 Docker 容器,然后更新您的 Kubernetes 部署以使用新版本
  • @Codebling 我正在使用谷歌云源代码存储库,最终将使用谷歌的 Kubernetes 引擎。现在我只在本地部署。您能否为我指出正确的方向,了解如何在 GCP 中执行类似于 GitHub 操作/工作流的操作?
  • 抱歉,我不知道 CI/CD 管道在那里是如何工作的。但基本上所有平台的概念都是相同的,你有一个脚本,一旦出现新代码,它就会对其进行测试。如果成功,它就会构建它。如果成功,您可以选择部署它(是否自动部署取决于您的视图/策略,有些地方喜欢只自动部署官方版本或根本不自动部署,有些地方喜欢部署每个版本的主控)
  • 我打电话给我的主管,他知道如何在 GCP 上设置 CI CD。当我理解时,我会在这里发布答案。

标签: node.js docker unit-testing kubernetes cicd


【解决方案1】:

我的问题是对 CI/CD 管道在测试时的工作方式存在误解。

它是这样的: Commit > Build (dev) > Deploy (dev) > Run tests > (pass or fail) >(如果通过)部署。

如果开发部署未通过测试,则代码永远不会提交,因此永远不会在管道中向前移动。

就我而言,我的package.json 文件需要这个:

  "scripts": {
    "start": "node src/index.js",
    "test": "npm install mocha -g && mocha --timeout 4000 --exit",
    "build": "docker image build -f ./Dockerfile -t my_project:dev ."
  },

我的cloudbuild.json 文件需要这个:

- id: "Run unit tests"
  name: node
  entrypoint: npm
  args: ["test"]
- id: "run"
  name: node
  entrypoint: npm
  args: ["start"]

如果测试通过,则部署继续,否则构建失败。

【讨论】:

  • @codebling 回答
  • @sai-chandra-gadde 回答
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 2020-01-10
  • 2019-12-12
  • 2019-10-04
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多