Cloudbuild不会触发新的Pod部署

如何解决Cloudbuild不会触发新的Pod部署

我一直在与GCP触发器一起玩,以在每次推送到Github存储库时部署新的Pod。我已经完成所有设置,并将docker映像推送到GCP容器注册表,并且触发器成功完成,没有任何错误。我将由构建管道生成 $ SHORT_SHA 标签用作标签。但是,但是,新的pod部署不起作用。我不确定是什么问题,因为我也在每次尝试测试部署时都在修改代码库。我已经看过Google关于Triggers的几本教程,但是我无法理解到底是什么问题以及为什么新推送的映像没有部署。

cloudbuild.yaml

  - name: maven:3-jdk-8
    id: Maven Compile
    entrypoint: mvn
    args: ["package","-Dmaven.test.skip=true"]
  - name: 'gcr.io/cloud-builders/docker'
    id: Build
    args:
    - 'build'
    - '-t'
    - 'us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA'
    - '.'
   
  - name: 'gcr.io/cloud-builders/docker'
    id: Push
    args:
    - 'push'
    - 'us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA'
  - name: 'gcr.io/cloud-builders/gcloud'
    id: Generate manifest
    entrypoint: /bin/sh
    args:
    - '-c'
    - |
       sed "s/GOOGLE_CLOUD_PROJECT/$SHORT_SHA/g" kubernetes.yaml
  - name: "gcr.io/cloud-builders/gke-deploy"
    args:
    - run
    - --filename=kubernetes.yaml
    - --image=us.gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA
    - --location=us-central1-c
    - --cluster=cluster-1

kubernetes.yaml

apiVersion: apps/v1
kind: Deployment
Metadata:
  name: <deployment_name>
spec:
  replicas: 1
  selector:
    matchLabels:
      app: <container_label>
  template:
    Metadata:
      labels:
        app: <container_label>
    spec:
      nodeselector:
        cloud.google.com/gke-nodepool: default-pool
      containers:
      - name: <container_name>
        image: us.gcr.io/<project_id>/<image_name>:GOOGLE_CLOUD_PROJECT
        ports:
        - containerPort: 8080
apiVersion: v1
kind: Service
Metadata:
  name: <service-name>
spec:
  selector:
    app: <selector_name>
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

解决方法

我建议对您的云构建进行一些更改,以便在 EKS 集群中部署应用程序。

cloudbuild.yaml

  1. 在构建和推送阶段,使用 gcr.io/$PROJECT_ID/<image_name>:$SHORT_SHA 将 arg 更改为 gcr.io/$PROJECT_ID/sample-image:latest
  2. 生成清单阶段 - 您可以跳过/删除阶段。
  3. gke-deploy 阶段 - 删除图像步骤。

kubernetes.yaml

  1. 在规范中 - 您可以将映像提及为 gcr.io/$PROJECT_ID/sample-image:latest,它将始终在每次部署时使用 latest

一切似乎都很好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?