我想部署一个定义为 gradle 子项目的 CloudFunction。
parent/build.gradle.kts
parent/cloudfunction/build.gradle.kts
似乎部署将子 build.gradle.kts
复制到 workspace/
文件夹并忽略父构建脚本。然后构建失败并出现奇怪的错误,例如:
e: /workspace/build.gradle.kts:7:5: Unresolved reference: implementation
e: /workspace/build.gradle.kts:8:5: Unresolved reference: implementation
e: /workspace/build.gradle.kts:9:5: Unresolved reference: implementation
我猜这是因为在父构建脚本中定义了 java、jvm 和其他插件/设置。
所以我想知道 - 有没有办法克服这个问题?我非常希望避免重复父构建脚本的内容——这正是拥有父构建脚本的重点——以避免重复。
答案 0 :(得分:1)
解决方案是传递直接编译和隐藏的 JAR,而不是让 gcloud
自行编译。
您可以部署包含该函数的预构建 JAR。如果您需要部署一个函数,该函数使用私有工件存储库中的依赖项,而从源代码构建时无法从 GCP 的构建管道访问该存储库中的依赖项,则这尤其有用。 JAR 可以是包含函数类及其所有依赖项类的超级 JAR,也可以是在 Class-Path
文件中包含 META-INF/MANIFEST.MF
项的瘦 JAR,用于依赖项 JAR。
在 Cloud Functions 中部署 JAR 的示例:
gcloud functions deploy jar-example \
--entry-point=Example \
--runtime=java11 \
--trigger-http \
--source=build/libs
从 JAR 部署部分描述了以下内容:
https://cloud.google.com/functions/docs/concepts/java-deploy#deploy_from_a_jar