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