![](/img/trans.png)
[英]Firestore cloud-function to update a field in all doc in coll with parameter
[英]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 镜像而不是本地云源存储库)。
您的 function 之前是直接从源存储库部署的,您没有将--source
标志传递给 gcloud。 在这些情况下,gcloud 会忽略本地目录中的代码。
最简单的解决方法是在您的 cloudbuild.yaml 中明确指定来源:
steps:
- name: "gcr.io/cloud-builders/gcloud"
args: ["functions", "deploy", "myfunction", "--region=europe-west1", "--source=."]
timeout: "1600s"
如果 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
标志时,如果 function 之前是直接从存储库部署的,则适用特定行为。 从gcloud functions deploy的文档中:
如果不指定 --source 标志:
- 当前目录将用于新的 function 部署。
- 如果 function 之前是使用本地文件系统路径部署的,那么该函数的源代码将使用当前目录进行更新。
- 如果 function 之前是使用 Google Cloud Storage 位置或源存储库部署的,则不会更新该函数的源代码。
你正在点击第三个选项。
Cloud Build 配置为在包含源代码副本的目录中运行 gcloud。 因此,您可以直接从本地文件系统进行部署——这会将 function 打包到一个 zip 文件中,将其上传到 Cloud Storage,并告诉 Cloud Functions 获取它。
如果您告诉 Cloud Functions 从存储库中获取其代码,则会对存储库进行第二次检出并从那里创建一个 zip 文件,这会稍微慢一些(如果分支已在背景)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.