cloudbuild.yaml 中构建步骤中的 gcloud beta 命令。我应该使用入口点还是参数?

Posted

技术标签:

【中文标题】cloudbuild.yaml 中构建步骤中的 gcloud beta 命令。我应该使用入口点还是参数?【英文标题】:gcloud beta command in build step in cloudbuild.yaml. Should I use entrypoint or args? 【发布时间】:2021-03-21 21:16:48 【问题描述】:

我正在尝试构建 Docker 映像并将其部署到 Cloud Run。而且我想设置min-instances=1 这样可以避免冷启动。

我正在通过 gcloud CLI 使用 Cloud Build 构建和部署它。

所以这是我在gcloud CLI 的第一次尝试:

gcloud builds submit . --config=./cloudbuild.yaml

以下是我的cloudbuild.yaml 中描述的构建步骤:

steps:
  # STEP_1: DOCKER BUILDS IMAGE
  # STEP_2: DOCKER PUSHES IMAGE TO CLOUD REGISTRY

  # STEP_3: GCLOUD SHOULD DEPLOY TO CLOUD RUN (DESCRIBED BELOW)

  - name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: gcloud
    args:
      - "run"
      - "deploy"
      - "my-service"
      - "--image=gcr.io/$PROJECT_ID/my-image"
      - "--platform=managed"
      - "--region=us-central1"
      - "--min-instances=1"

您会看到构建 STEP_3 运行:gcloud run deploy my-service ... min-instances=1

我收到以下错误:

The `--min-instances` flag is not supported in the GA release track on the 
fully managed version of Cloud Run. Use `gcloud beta` to set `--min-instances` on Cloud Run (fully managed).

所以我想我将不得不使用gcloud beta 命令。但在这种情况下我有一些问题:

我还需要将beta 命令添加到我的gcloud builds submit . 命令吗?

我应该如何在cloudbuilt.yaml 中设置它?我是将其添加到entrypoint 还是作为args 中的参数?

选项 #1

  - name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: "gcloud beta"
    args:
      - "run"
   // ETC

选项 #2

  - name: "gcr.io/google.com/cloudsdktool/cloud-sdk"
    entrypoint: gcloud
    args:
      - "beta"
      - "run"
   // ETC

【问题讨论】:

在 args 下使用。所有元素都连接成一个字符串。 @Pentium10 - 发表您的评论作为答案。 【参考方案1】:

两者都没有隐藏的原因。

在 args 下使用。所有元素都连接成一个字符串。

【讨论】:

以上是关于cloudbuild.yaml 中构建步骤中的 gcloud beta 命令。我应该使用入口点还是参数?的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Build 不会替换 cloudbuild.yaml 的机密部分中的值

无法使用 Google Cloud 构建从 cloudbuild.yaml 运行 Sonarqube 分析

cloudbuild.yaml 包含不同的云构建器配置

cloudbuild.yaml 上的错误:(gcloud.builds.submit)将 cloudbuild.yaml 解释为构建配置:“列表”对象没有属性“项目”

传递项目 ID 时 cloudbuild.yaml 文件中的正则表达式错误

有啥方法可以从 docker hub 提取图像并使用 cloudbuild.yaml 部署到云运行