使用 Kubernetes 和 Container Builder 在 Google Cloud 中进行 NodeJS 持续部署

2025-06-09

使用 Kubernetes 和 Container Builder 在 Google Cloud 中进行 NodeJS 持续部署

您想将应用部署到 Kubernetes 集群,而无需任何手动步骤吗?
我已经帮您搞定了,使用 Google Cloud 创建持续部署流水线非常简单。
为了便于理解,我选择了 NodeJS Express 应用程序,但它也适用于 React、PHP 或任何其他应用层。

让我们开始吧:

由于 IAM 管理员

首先,我们需要授予容器构建器访问我们 Kubernetes API 的权限。请记住,这不会授予对特定集群的访问权限。它只是允许 Cloudbuilder 服务帐户访问我们的 Kubernetes 集群。因此,请跳转到IAM 设置页面并查找 Cloudbuild 服务帐户。如果该帐户不存在,您可能需要启用Cloudbuild API。

它看起来应该是这样的
云构建服务帐户

我们需要添加访问我们集群的 Kubernetes API 的权限,因此请点击笔并查找以下内容。

Kubernetes API 访问权限

准备申请

我不会详细介绍如何设置 Express 应用程序并对其进行测试。
我创建了一个包含示例应用程序的仓库,我们可以使用它。

GitHub 徽标 mfahlandt / gcp-continuous-deployment-node-demo

这是一个示例项目,用于展示如何轻松创建到 Google Cloud 的持续部署

使用 Container Builder 和 Kubernetes Engine 完成 NodeJS 持续部署

要了解如何使用此存储库的所有详细信息,请参阅dev.to上的相应区块帖子




为了方便您了解,我们有一个基本的 Express 应用,其中包含两个后端路由,分别用于检索用户或通过 ID 检索用户。
此外,我们还提供了一个测试文件夹,其中包含针对这两个路由的测试。这些测试是在 chai 和 mocha 的帮助下编写的。
如果您下载了代码库,可以执行以下操作来检查测试是否正常运行。


npm install
npm test

Enter fullscreen mode Exit fullscreen mode

在应用程序运行之前,我们需要在 Kubernetes 集群中部署服务和应用。因此,让我们快速创建一个服务和一个部署。所有文件都可以在代码库中找到。


apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: server-production
  labels:
    app: YOUR-PROJECT-ID
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: server
    spec:
      containers:
        - name: server
          image: gcr.io/PROJECT_ID/REPOSITORY:master
          imagePullPolicy: Always
          ports:
            - containerPort: 3000
          env:
            - name: NODE_ENV
              value: "production"

Enter fullscreen mode Exit fullscreen mode

这里唯一重要的部分是将项目 ID 和存储库更改为存储库将具有的路径。

之后,我们只需要一个服务来将我们的应用暴露到互联网上。所以赶紧申请服务吧。


kind: Service
apiVersion: v1
metadata:
  name:  server
spec:
  selector:
    app:  server
  ports:
    - name:  server
      protocol: TCP
      port: 80
      targetPort: 3000
  type: LoadBalancer

Enter fullscreen mode Exit fullscreen mode

准备部署

现在我们需要进入整个设置过程中最重要的部分——cloudbuild.yaml。我们将在这里定义持续部署步骤所需的所有内容。

第一个令人惊奇的部分是,可以将所有重要数据放入构建中定义的环境变量中,因此您可以将云构建用于不同的设置。

首先,我们安装所有节点依赖项并运行测试。


  - name: 'gcr.io/cloud-builders/npm'
    args: ['install']
  - name: 'gcr.io/cloud-builders/npm'
    args: ['run', 'test']

Enter fullscreen mode Exit fullscreen mode

之后,我们会构建一个包含所有仓库文件和正确定义环境的 Docker 镜像,以便您可以轻松地进行临时部署,甚至分支部署。最后,我们会将其推送到 Google 镜像仓库。


  - name: 'gcr.io/cloud-builders/docker'
    args:
      - build
      - '--build-arg'
      - 'buildtime_variable=$_NODE_ENV'
      - '-t'
      - gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID
      - '.'
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID']

Enter fullscreen mode Exit fullscreen mode

同样重要的是要注意,我们用唯一的构建 ID 标记图像以利用 kubernetes 的应用能力,因此图像实际上发生了改变。


  - name: 'gcr.io/cloud-builders/kubectl'
    args:
      - set
      - image
      - deployment
      - $_DEPLOYMENT
      - $_DEPLOYMENT=gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID
    env:
      - 'CLOUDSDK_COMPUTE_ZONE=$_CLUSTER_ZONE'
      - 'CLOUDSDK_CONTAINER_CLUSTER=$_CLUSTER_NAME'

Enter fullscreen mode Exit fullscreen mode

最后,我们将镜像设置到 Kubernetes 集群中。砰!提交钩子,自动化测试,如果成功,则自动部署,无需停机。

现在我们打开容器构建器触发器并选择我们的代码所在的位置。

创建触发器

在最后一个触发步骤中,我们现在可以添加自定义变量。这是我们实际定义集群的第一个步骤。这样,所有内容都聚合在一个地方,随时可用。

创建触发器第 2 部分

现在我们只需要提交给主服务器,然后触发器就会启动。

构建成功

YIHA 现在我们有了持续部署,无需设置任何额外的服务,例如 jenkins、ant 或 chef。真是太棒了

我正在考虑创建一个从零开始到云端大师的教程系列,你有兴趣吗?给我留言吧!

链接:https://dev.to/mfahlandt/nodejs-continuous-deployment-done-with-container-builder-and-kubernetes-engine-in-google-cloud-570p
PREV
10 个最实用的 IDE 热键(附 GIF 示例)IT 人员注重效率。效率离不开热键。希望有更多热键
NEXT
编码的未来是“无代码”