我正在调查使用 spring-cloud-task 在我的 Cloud Foundry 环境中执行短期作业。
查看文档和一些 youtube 视频,我收集到我的设置应该涉及 3 个组件(应用程序):
- 任务请求者:一个 spring-boot 应用程序,将 a
TaskLaunchRequest
放在 spring-cloud-stream Rabbit/Kafka 队列/主题上 - 任务启动器:一个带有注释的 spring-boot 应用程序
@EnableTaskLauncher
,它具有以下依赖项:spring-cloud-starter-task
,spring-cloud-starter-stream-rabbit
,spring-cloud-deployer-cloudfoundry
,spring-cloud-deployer-resource-maven
- 任务定义:一个带有注释的spring-boot应用程序
@EnableTask
,它具有由短期工作执行的逻辑
关于使用此设置在 CloudFoundry 中部署任务所需的流程和配置,我有几个问题。
- 配置
environmentProperties
,deploymentProperties
和(applicationName
在TaskLaunchRequest
任务提交者中)与配置CloudFoundryDeploymentProperties
(在任务启动器中)有什么区别?另外,应该在哪里SPRING_APPLICATION_JSON
定义它,它到底做了什么? - 我看到的所有 spring-cloud-task 示例都使用该
maven://
方案来指示TaskLaunchRequest#uri
. 为什么依赖项不与spring-cloud-deployer-cloudfoundry
依赖项捆绑在一起spring-cloud-deployer-resource-maven
?部署到 CloudFoundry 时是否首选不同的 URI 方案? - 当我
cf-push
使用实例 = 0 将任务 bootJar 到 Cloud Foundry 时,当任务启动器启动任务时,一切正常。在这种情况下,唯一的问题是,即使将新版本的 SNAPSHOT bootJar 发布到远程存储库,也会cf-push
使用来自 的原始 bootJar(即使在设置时maven.remote-repositories.my-repo.snapshot-policy.update-policy: always
)。如果已经为尝试由 spring-cloud-task 动态执行的应用程序定义了 Cloud Foundry 应用程序,是否实际上没有考虑 maven 工件?换句话说,maven 工件的每个新版本(SNAPSHOT 或 RELEASE)是否都需要新的 Cloud Foundry 应用程序? - 当我没有
cf-push
将任务 bootJar 发送到 Cloud Foundry 并且没有预先创建任务应用程序时,我希望任务启动器将使用我指定的 maven 工件在 Cloud Foundry 中为我创建应用程序(使用spring.cloud.deployer.cloudfoundry.push-task-apps-enabled: true). When I attempt this, then I get an error in the launcher indicating
Application [... ] 在暂存and this error stems from the following:
org.cloudfoundry.operations.applications.DefaultApplications.pushManifest(DefaultApplications.java:431)` 期间失败。我可以看到任务启动器已成功在 Cloud Foundry 中创建了应用程序,但未能暂存它。什么我错过了这个工作吗?以下是任务应用程序中未能暂存的日志:
2020-09-25T14:05:43.69-0400 [API/2] OUT Uploading bits for app with guid d598b251-4827-4c55-9e56-1d0c8301b5c3
2020-09-25T14:05:59.66-0400 [API/0] OUT Updated app with guid d598b251-4827-4c55-9e56-1d0c8301b5c3 ({"state"=>"STOPPED"})
2020-09-25T14:06:00.26-0400 [API/0] OUT Creating build for app with guid d598b251-4827-4c55-9e56-1d0c8301b5c3
2020-09-25T14:06:00.61-0400 [API/0] OUT Updated app with guid d598b251-4827-4c55-9e56-1d0c8301b5c3 ({"state"=>"STARTED"})
2020-09-25T14:06:01.00-0400 [STG/0] OUT Cell 884d3852-1063-452a-8e94-c11ea9307c4a creating container for instance cc9b7101-2fc4-4c56-9f86-019736eb6b71
2020-09-25T14:06:01.79-0400 [STG/0] OUT Cell 884d3852-1063-452a-8e94-c11ea9307c4a successfully created container for instance cc9b7101-2fc4-4c56-9f86-019736eb6b71
2020-09-25T14:06:01.95-0400 [STG/0] OUT Downloading app package...
2020-09-25T14:06:02.37-0400 [STG/0] OUT Downloaded app package (12.4M)
2020-09-25T14:06:04.08-0400 [STG/0] OUT -----> Java Buildpack v4.29.1 | https://github.com/cloudfoundry/java-buildpack.git#3dbe582
2020-09-25T14:06:04.08-0400 [STG/0] ERR [Buildpack] ERROR Finalize failed with exception #<RuntimeError: No container can run this application. Please ensure that you've pushed a valid JVM artifact or artifacts using the -p command line argument or path manifest entry. Information about valid JVM artifacts can be found at https://github.com/cloudfoundry/java-buildpack#additional-documentation. >
2020-09-25T14:06:04.08-0400 [STG/0] ERR No container can run this application. Please ensure that you've pushed a valid JVM artifact or artifacts using the -p command line argument or path manifest entry. Information about valid JVM artifacts can be found at https://github.com/cloudfoundry/java-buildpack#additional-documentation.
2020-09-25T14:06:04.08-0400 [STG/0] ERR Failed to compile droplet: Failed to run finalize script: exit status 1
2020-09-25T14:06:04.11-0400 [STG/0] OUT Exit status 223
2020-09-25T14:06:04.52-0400 [STG/0] OUT Cell 884d3852-1063-452a-8e94-c11ea9307c4a stopping instance cc9b7101-2fc4-4c56-9f86-019736eb6b71
2020-09-25T14:06:04.52-0400 [STG/0] OUT Cell 884d3852-1063-452a-8e94-c11ea9307c4a destroying container for instance cc9b7101-2fc4-4c56-9f86-019736eb6b71
2020-09-25T14:06:04.61-0400 [API/4] ERR Failed to stage build: staging failed
2020-09-25T14:06:05.15-0400 [STG/0] OUT Cell 884d3852-1063-452a-8e94-c11ea9307c4a successfully destroyed container for instance cc9b7101-2fc4-4c56-9f86-019736eb6b71
按照日志中所说的,我检查了 maven 工件实际上是 15.1MB 的有效 bootJar,但日志显示我的应用程序包只有“12.4M”。buildpack 版本(4.29.1)也不是我在spring.cloud.deployer.cloudfoundry.buildpacks
属性中指定的版本。我认为问题可能在于未正确设置 buildpack 配置,但我不确定。
注意:我现在不想在spring-cloud-dataflow
我的架构中引入。