我的自动化云功能部署有问题
我有一个云函数存储在 Google Cloud 存储库中
Git 代码包含一个包含以下内容的 cloudbuild.yaml 文件:
steps:
- name: "gcr.io/cloud-builders/gcloud"
args: ["functions", "deploy", "myfunction", "--region=europe-west1"]
timeout: "1600s"
我只有一个分部Master。
当我推送我的提交时,cloudbuild 会触发并部署云功能
问题是它总是部署前一个提交,而不是最后一个
例如: 2:23:我将源代码推送到 Google 源存储库
这是结果:
2:23:33,cloudbuild触发并成功部署云功能
这是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: [email protected]
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结束,我在我的云函数源选项卡中看到相同的时间
如果我只需单击编辑按钮,然后单击部署按钮,手动强制云功能重建,它就会部署正确的提交(1b67729)
以下是云函数的参数:
我的cloudbuild错误在哪里,以及如何始终部署最后一次提交???
感谢您的帮助
我也遇到了同样的问题(尽管我使用的是 GitHub 镜像而不是本机云源存储库)。
您的函数之前是直接从源存储库部署的,并且您没有将
--source
标志传递给 gcloud。在这种情况下,gcloud 会忽略本地目录中的代码。
最简单的修复方法是在 cloudbuild.yaml 中显式指定源:
steps:
- name: "gcr.io/cloud-builders/gcloud"
args: ["functions", "deploy", "myfunction", "--region=europe-west1", "--source=."]
timeout: "1600s"
如果该函数从未配置为直接从存储库获取其源代码,则您不会点击此按钮。
配置云函数时,可以选择从云源存储库获取源代码。通过控制台创建函数时,系统会提示您将此选项作为一个选项,但也可以使用 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 ...]
这是您可以在构建输出中看到的“sourceRepository”设置。
但是,正如您在控制台中看到的 (
resolved to 1b67729b
) Cloud Functions 并未从那里更新其代码。
当您向 gcloud 省略
--source
标志时,如果该函数之前是直接从存储库部署的,则适用特定行为。来自 gcloud 函数部署的文档:
如果您不指定 --source 标志:
- 新功能部署将使用当前目录。
- 如果该函数之前是使用本地文件系统路径部署的,则该函数的源代码将使用 当前目录。
- 如果该函数之前是使用 Google Cloud Storage 位置或源存储库部署的,则该函数的源 代码不会更新。
您正在点击第三个选项。
Cloud Build 配置为在包含源代码副本的目录中运行 gcloud。因此,您可以直接从本地文件系统进行部署 - 这会将函数打包在 zip 文件中,将其上传到 Cloud Storage,并告诉 Cloud Functions 获取它。
如果您告诉 Cloud Functions 从存储库中获取其代码,则会对存储库进行第二次签出,并从那里创建一个 zip 文件,这会稍微慢一些(如果分支已更新,则可能容易出现竞争情况)背景)。
在我的情况下,存储库没有同步 - 在构建日志中,它一直显示 HEAD 来自几周前的构建
转到:https://source.cloud.google.com/重新同步并更新我的分支