繁体   English   中英

Google Cloud build 总是使用之前的提交部署我的云功能

[英]Google Cloud build always deploys my cloud-function with previous commit

我的自动化云 function 部署有问题

我有一个存储在谷歌云存储库中的云 function

Git 代码包含一个 cloudbuild.yaml 文件,内容如下:

steps:
- name: "gcr.io/cloud-builders/gcloud"
  args: ["functions", "deploy", "myfunction", "--region=europe-west1"]
timeout: "1600s"

我只有一个分支Master。

当我推送我的提交时,cloudbuild 触发并部署云 function

问题是它总是部署上一个提交,而不是最后一个

例如:2:23:我将我的源代码推送到 Google Source 存储库

这是结果:

从本地源提交

2:23:33 cloudbuild触发并部署成功云function

在此处输入图像描述

这是 Cloudbuild 的日志:

starting build "e3a0e735-50fc-4315-bafd-03128156d69f"

FETCHSOURCE
Initialized empty Git repository in /workspace/.git/
From https://source.developers.google.com/p/myproject/r/myrepo
 * branch            1b67729b8498c35fc19a45b14b8d674635300594 -> FETCH_HEAD
HEAD is now at 1b67729 PrayingforCommit
BUILD
Already have image (with digest): gcr.io/cloud-builders/gcloud
Deploying function (may take a while - up to 2 minutes)...
...............................................done.
availableMemoryMb: 256
entryPoint: process_gcs
eventTrigger:
  eventType: google.storage.object.finalize
  failurePolicy: {}
  resource: projects/_/buckets/mybucket
  service: storage.googleapis.com
ingressSettings: ALLOW_ALL
labels:
  deployment-tool: cli-gcloud
name: projects/myproject/locations/europe-west1/functions/myfunction
runtime: python37
serviceAccountEmail: myproject@appspot.gserviceaccount.com
sourceRepository:
  deployedUrl: https://source.developers.google.com/projects/myproject/repos/myrepo/revisions/2ed14c3225e7fcc089f2bc6a0ae29c7564ec12b9/paths/
  url: https://source.developers.google.com/projects/myproject/repos/myrepo/moveable-aliases/master/paths/
status: ACTIVE
timeout: 60s
updateTime: '2020-04-15T00:24:55.184Z'
versionId: '2'
PUSH
DONE

如您所见,触发的提交是 1b67729,但 DeployedUrl 行显示 2ed14c3,这是之前的提交

操作在 2:24:55 结束,我在我的云 function 源选项卡中看到相同的时间

在此处输入图像描述

如果我只单击编辑按钮,然后单击部署按钮,手动强制云 function 重建,它会部署正确的提交 (1b67729)

在此处输入图像描述

以下是云函数的参数:

在此处输入图像描述

我在 cloudbuild 上的错误在哪里,以及如何始终部署最后一次提交???

谢谢你的帮助

我遇到了同样的问题(尽管我使用的是 GitHub 镜像而不是本地云源存储库)。

省略 --source 标志时,Cloud Functions 不会检查对源存储库的更新

您的 function 之前是直接从源存储库部署的,您没有将--source标志传递给 gcloud。 在这些情况下,gcloud 会忽略本地目录中的代码。

最简单的解决方法是在您的 cloudbuild.yaml 中明确指定来源:

steps:
- name: "gcr.io/cloud-builders/gcloud"
  args: ["functions", "deploy", "myfunction", "--region=europe-west1", "--source=."]
timeout: "1600s"

如果 function 从未配置为直接从存储库中获取其源代码,那么您就不会点击它。

您的云 Function 之前已从源存储库部署

配置 Cloud Function 时,可以选择从 Cloud Source Repository 获取源代码。 通过控制台创建 function 时,系统会提示您使用此选项,但也可以使用 gcloud:

gcloud functions deploy NAME \
    --source https://source.developers.google.com/projects/PROJECT_ID/repos/REPOSITORY_ID/moveable-aliases/master/paths/SOURCE \
    [... other gcloud options ...]

这是您可以在构建 output 中看到的“sourceRepository”设置。

但是,正如您在控制台中看到的(已resolved to 1b67729b ),Cloud Functions 并未从那里更新其代码。

省略 gcloud 的 --source 标志会导致潜在的混淆行为

当您省略 gcloud 的--source标志时,如果 function 之前是直接从存储库部署的,则适用特定行为。 gcloud functions deploy的文档中:

如果不指定 --source 标志:

  • 当前目录将用于新的 function 部署。
  • 如果 function 之前是使用本地文件系统路径部署的,那么该函数的源代码将使用当前目录进行更新。
  • 如果 function 之前是使用 Google Cloud Storage 位置或源存储库部署的,则不会更新该函数的源代码。

你正在点击第三个选项。

通过 Cloud Build 部署时,最好不要将 Cloud Functions 直接链接到源存储库

Cloud Build 配置为在包含源代码副本的目录中运行 gcloud。 因此,您可以直接从本地文件系统进行部署——这会将 function 打包到一个 zip 文件中,将其上传到 Cloud Storage,并告诉 Cloud Functions 获取它。

如果您告诉 Cloud Functions 从存储库中获取其代码,则会对存储库进行第二次检出并从那里创建一个 zip 文件,这会稍微慢一些(如果分支已在背景)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM