设置 skaffold 以将更改部署到谷歌云构建

问题描述

我是 skaffold 的新手,并已设置如下 yaml 文件,该文件应将我项目中 src 文件夹中的任何更改同步到 goolge cloud build。请注意我没有使用 git。

当我运行 skaffold dev 时,本地机器 (macos) 上 src 文件夹中的任何更改都会同步到 google cloud build,即更新和部署图像。

如果我在 skaffold dev 运行时在 src 文件夹中进行任何更改,我会注意到 skaffold 识别更改但未部署到 google cloud build。

我如何更新以下 yaml 文件,该文件也会在每次我更改 src 文件夹中的任何文件时将更改部署到 google cloud build。目前,我必须停止 skaffold 并重新运行它,以便在 google cloud build 中部署更改。

package.json

{
  "name": "auth","version": "1.0.0","description": "","main": "index.js","scripts": {
    "start": "ts-node-dev src/index.ts"
  },"keywords": [],"author": "","license": "ISC","dependencies": {
    "@types/express": "^4.17.12","express": "^4.17.1","express-validator": "^6.12.0","ts-node-dev": "^1.1.6","typescript": "^4.3.4"
  }
}

skaffold.yaml

apiVersion: skaffold/v2alpha3
kind: Config
deploy:
  kubectl:
    manifests:
      - ./infra/k8s/*
build:
  # local:
  #   push: false
  googleCloudBuild:
    projectId:  ticketing-dev
  artifacts:
    - image: gcr.io/ticketing-dev/auth
      context: auth
      docker:
        dockerfile: Dockerfile
      sync:
        manual:
          - src: 'src/**/*.ts'
            dest: .

Docker 文件

FROM node:alpine

#create working dir within image called app
workdir /app
copY package.json .
RUN npm install
copY . .

CMD ["npm","start"]

下面是auth-depl.yaml

apiVersion: apps/v1
kind: Deployment
Metadata:
  name: auth-depl
spec:
  replicas: 1
  selector:
    matchLabels:
      app: auth
  template:
    Metadata:
      labels:
        app: auth
    spec: 
      containers:
        - name: auth
          image: gcr.io/ticketing-dev/auth
---
apiVersion: v1
kind: Service
Metadata:
  name: auth-srv
spec:
  selector:
    app: auth
  ports:
    - name: auth
      protocol: TCP
      port: 3000
      targetPort: 3000

解决方法

Skaffold 将更改同步到正在运行的容器,而不是 GCB。要求之一是容器必须包含 tar

您尚未包含 Dockerfile,但一个关键点是同步文件可能还不够:您的应用需要检测并重新加载更改。大多数打字稿应用程序使用 tsc-watch 重新编译和重新启动。

例如,我使用 Skaffold TypeScript example 看到类似以下内容:

[node] 2:22:47 PM - Found 0 errors. Watching for file changes.
[node] Example app listening on port 3000.
Syncing 1 files for node-typescript-example:21b757dbdb147a87b0ce4b1e538ab93cdbc114e99515fdf4e398ed62a2b3809d
Watching for changes...
[node] 2:22:52 PM - File change detected. Starting incremental compilation...
[node] 
[node] 
[node] 2:22:52 PM - Found 0 errors. Watching for file changes.
[node] Example app listening on port 3000!

[node] 行来自容器内。