部署具有私有依赖项的云功能



这是我在SO上的第一个问题,我会尽我所能把它做好。

我的团队使用一些公共类部署了多个Java云函数(GCP((使用maven来管理依赖关系(。现在,这些类在每个函数中都是重复的,并且必须在每次代码编辑时处处更新。每个云功能都是从源代码部署的。为了避免重复这些类,我将它们打包在一个jar中,本地运行一切都很好。我在每个Cloud Function pom文件中添加了这个jar作为本地依赖项,并试图通过构建一个具有所有依赖项的jar并在gcloud deploy--source选项中提供它来从jar进行部署。这导致了一个似乎是jar上传的超时错误。

错误跟踪:

DEBUG: Starting new HTTPS connection (1): storage.googleapis.com:443
DEBUG: Caught socket error, retrying: ('Connection aborted.', timeout('The write operation timed out',))

到目前为止我尝试了什么:

  • 使用gcloud config set app/cloud_build_timeout 10000设置更高的部署超时,但这似乎不适用于上传步骤,因为它总是在几分钟后失败
  • 像以前一样,将我的本地依赖项上传到一个私有的nexus存储库,以从源代码部署我的功能,但当我运行mvn package时,由于Wagon错误,拉取失败,我也没有找到任何解决方案:WagonTransporterFactory: Unsupported transport protocol

详细错误:

[ERROR] Failed to execute goal on project get-content: Could not resolve dependencies for project project:cf:jar:1.0: Failed to collect dependencies at project:pipeline:jar:0.0.1: Failed to read artifact descriptor for project:pipeline:jar:0.0.1: Could not transfer artifact project:pipeline:pom:0.0.1 from/to project-nexus (XXX): Cannot access XXX with type default using the available connector factories: BasicRepositoryConnectorFactory: Cannot access XXX using the registered transporter factories: WagonTransporterFactory: Unsupported transport protocol -> [Help 1]

我认为这只是因为我的jar依赖关系太大,无法上传,因为我实际上首先错误地部署了没有依赖关系的jar(部署成功,但在执行过程中缺少类定义(。我的问题是,如何使用一个本地/私有依赖项来部署我的云功能?

注:

  • 我无法将依赖项上传到公共maven存储库
  • 每个云函数还依赖于公共maven依赖项,这些依赖项似乎太大,无法打包在单个jar中进行部署

我通过从Maven切换到Gradle解决了这个问题。问题是Maven将存储库身份验证参数存储在本地文件~/.m2/settings.xml中,Google Build在构建我的云功能进行部署时无法访问该文件。我切换到Gradle,在这个问题之后直接在gradle.build文件中提供身份验证。

相关内容

  • 没有找到相关文章