首页 > 解决方案 > 设置 skaffold 以将更改部署到谷歌云构建

问题描述

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

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

如果我在 skaffold dev 运行时在 src 文件夹中进行任何更改,我会注意到 skaffold 会识别更改但未部署到谷歌云构建。

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

包.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"
  }
}

脚手架.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: .

码头工人文件

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

标签: kubernetesgoogle-kubernetes-enginegoogle-cloud-buildskaffold

解决方案


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

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

例如,我使用 Skaffold TypeScript 示例看到如下内容:

[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]线条来自容器内。


推荐阅读