如何自动化部署 Spring Data Flow?

Posted

技术标签:

【中文标题】如何自动化部署 Spring Data Flow?【英文标题】:How do you automate deploying Spring Data Flow? 【发布时间】:2017-11-19 05:43:35 【问题描述】:

我有一个 Spring Cloud Data Flow 实例,它支持我需要的应用程序和流。我什至编写了在命令 shell 中工作的脚本,以便一次部署所有这些东西。问题是我现在需要手动执行一个步骤,而不是让它开箱即用。

对于 Windows 和 Linux,我知道如何通过 shell 运行脚本并在脚本运行时结束。

问题是我似乎可以对 Spring Data Flow Shell 做同样的事情。我想做这样的事情:

java -jar spring-cloud-dataflow-shell.jar --runScript my-awesome-script.shell

但是,我看不到任何说明存在类似内容的文档。我能找到的每个选项都没有运行脚本并保持外壳打开。或者是否有另一个我完全不知道的选择。过去 6 年做 .Net 打断了我 15 年的 Java 经验,Spring 看起来与以前完全不同。

【问题讨论】:

【参考方案1】:

有时我是个笨蛋。昨天搜索了一整天后,我突然想到使用 --help 选项来获取 shell 的命令行选项。

C:\Dev>java -jar spring-cloud-dataflow-shell-1.2.1.RELEASE.jar --help
Data Flow Options:
  --dataflow.uri=<uri>                              Address of the Data Flow Server [default: http://localhost:9393].
  --dataflow.username=<USER>                        Username of the Data Flow Server [no default].
  --dataflow.password=<PASSWORD>                    Password of the Data Flow Server [no default].
  --dataflow.credentials-provider-command=<COMMAND> Executes an external command which must return an OAuth Access Token [no default].
  --dataflow.skip-ssl-validation=<true|false>       Accept any SSL certificate (even self-signed) [default: no].
  --spring.shell.historySize=<SIZE>                 Default size of the shell log file [default: 3000].
  --spring.shell.commandFile=<FILE>                 Data Flow Shell executes commands read from the file(s) and then exits.
  --help                                            This message.

当我尝试使用 --spring.shell.commandFile 选项时,它确实完成了我需要 shell 执行的操作:运行脚本并结束。

java -jar spring-cloud-data-flow-shell.jar --spring.shell.commandFile=my-awesome-script.shell

注意:Spring 网站上的文档根本没有提到这一点。如果这是可以通过 Spring Config Server 完成的事情,我也想知道。

【讨论】:

【参考方案2】:

除了--spring.shell.commandFile 选项之外,您还可以使用包含各种流/任务创建和部署命令的dataflow:&gt;script --file &lt;YOUR_AWESOME_SCRIPT&gt;。我也看到用户对不同环境的提交文件工件进行版本控制。遗憾的是,这两个选项都没有记录在案,我们将修复它 (spring-cloud/spring-cloud-dataflow#1534)。

话虽如此,对于 SCDF 2.0,我们将添加受 Kubernetes Helm 启发的本地 CI/CD 支持。这将包括 SCDF 的 shell/gui 中用于应用级金丝雀的原语、应用的版本控制以及由 config-server 支持的定义。

【讨论】:

shell 中的script --file my-awesome-script.shell 命令是我提出问题之前所在的位置。我只想能够自动化部署和配置,而无需添加额外的步骤。感谢您为我打开那张票。 Spring 配置服务器是否有一个令人满意的故事来部署应用程序和流? 在一个不相关的注释上:当我在谷歌上搜索 SCDF 时,第一个响应是新加坡民防部队,第二个响应是南加州发展论坛......我们的首字母缩略词用完了 :) 如果您要自动部署流/任务,当前可用的选项是 REST-API 或 DataflowTemplate,您必须直接与 CI 系统集成。一些客户通过 Jenkins/Concourse 实例化部署。对于每个应用,应用和绑定属性都在 config-server 支持的版本化 YAML 文件中进行配置。 不过,在 2.0 中,我们将直接从 DSL/UI/API 支持单个应用程序的生命周期。感谢您对 Google 搜索结果的反馈。【参考方案3】:
//Start spring cloud dataflow server
    //create the file 
    //file name:Task_scripts.shell and inside file bas the below command
    app register --name PredictionBatchTest --type task --uri file://D:/PredictionBatch/target/PredictionBatch-0.0.1-SNAPSHOT.jar
    //Create the shell script file and add below command and execute the shell script
    java -jar scdf-shell-1.6.3.RELEASE.jar --spring.shell.commandFile=D:/my-awesome-script.shell

【讨论】:

以上是关于如何自动化部署 Spring Data Flow?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Data Flow (SCDF) + Apache Kafka - 在哪里部署 Kafka 代理?

通过单独运行批处理微服务在 Spring Cloud Data Flow 上部署 Spring Batch 应用程序

Swarm 的 Spring Cloud Data Flow 支持

Spring Cloud Data Flow初探

如何在 Spring Cloud Data Flow 任务中外部化应用程序属性

Spring Cloud Data Flow 编辑现有流