1 前言
歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!
之前我們用兩篇文章講解了Spring Cloud Data Flow
,例子都是用UI
操作的,但我們在Linux
系統上經常是無法提供界面來操作,集成在Jenkins
上也無法使用UI
。好在官方提供了Data Flow Shell
工具,可以在命令行模式下進行操作,非常方便。
相關文章可參考:
Spring Cloud Data Flow初體驗,以Local模式運行
把Spring Cloud Data Flow部署在Kubernetes上,再跑個任務試試
Spring Cloud Data Flow Server
提供了可操作的REST API
,所以這個Shell
工具的本質還是通過調用REST API
來交互的。
2 常用操作
2.1 啟動
首先要確保我們已經安裝有Java
環境和下載了可執行的jar
包:spring-cloud-dataflow-shell-2.5.3.RELEASE.jar
然后啟動如下:
$ java -jar spring-cloud-dataflow-shell-2.5.3.RELEASE.jar
默認是連接了http://localhost:9393
的Server
,可以通過--dataflow.uri=地址
來指定。如果需要認證信息,需要加上--dataflow.username=用戶 --dataflow.password=密碼
。
比如我們連接之前安裝在Kubernetes
上的Server
如下:
$ java -jar spring-cloud-dataflow-shell-2.5.3.RELEASE.jar --dataflow.uri=http://localhost:30093
2.2 Application操作
介紹一下Application
相關操作:
列出所有目前注冊的app
:
dataflow:>app list
╔═══╤══════╤═════════╤════╤════════════════════╗
║app│source│processor│sink│ task ║
╠═══╪══════╪═════════╪════╪════════════════════╣
║ │ │ │ │composed-task-runner║
║ │ │ │ │timestamp-batch ║
║ │ │ │ │timestamp ║
╚═══╧══════╧═════════╧════╧════════════════════╝
查看某個app
的信息:
dataflow:>app info --type task timestamp
清除app
注冊信息:
dataflow:>app unregister --type task timestamp
Successfully unregistered application 'timestamp' with type 'task'.
清除所有app
注冊信息:
dataflow:>app all unregister
Successfully unregistered applications.
dataflow:>app list
No registered apps.
You can register new apps with the 'app register' and 'app import' commands.
注冊一個app
:
dataflow:>app register --name timestamp-pkslow --type task --uri docker:springcloudtask/timestamp-task:2.1.1.RELEASE
Successfully registered application 'task:timestamp-pkslow'
dataflow:>app list
╔═══╤══════╤═════════╤════╤════════════════╗
║app│source│processor│sink│ task ║
╠═══╪══════╪═════════╪════╪════════════════╣
║ │ │ │ │timestamp-pkslow║
╚═══╧══════╧═════════╧════╧════════════════╝
批量導入app
,可以從一個URL
或一個properties
文件導入:
dataflow:>app import https://dataflow.spring.io/task-docker-latest
Successfully registered 3 applications from [task.composed-task-runner, task.timestamp.metadata, task.composed-task-runner.metadata, task.timestamp-batch.metadata, task.timestamp-batch, task.timestamp]
需要注意的是,在注冊或導入app
時,如果重復的話,默認是無法導入的,不會覆蓋。如果想要覆蓋,可以加參數--force
。
dataflow:>app register --name timestamp-pkslow --type task --uri docker:springcloudtask/timestamp-task:2.1.1.RELEASE
Command failed org.springframework.cloud.dataflow.rest.client.DataFlowClientException: The 'task:timestamp-pkslow' application is already registered as docker:springcloudtask/timestamp-task:2.1.1.RELEASE
The 'task:timestamp-pkslow' application is already registered as docker:springcloudtask/timestamp-task:2.1.1.RELEASE
dataflow:>app register --name timestamp-pkslow --type task --uri docker:springcloudtask/timestamp-task:2.1.1.RELEASE --force
Successfully registered application 'task:timestamp-pkslow'
2.3 Task操作
列出task
:
dataflow:>task list
╔════════════════╤════════════════════════════════╤═══════════╤═══════════╗
║ Task Name │ Task Definition │description│Task Status║
╠════════════════╪════════════════════════════════╪═══════════╪═══════════╣
║timestamp-pkslow│timestamp │ │COMPLETE ║
║timestamp-two │<t1: timestamp || t2: timestamp>│ │ERROR ║
║timestamp-two-t1│timestamp │ │COMPLETE ║
║timestamp-two-t2│timestamp │ │COMPLETE ║
╚════════════════╧════════════════════════════════╧═══════════╧═══════════╝
刪除一個task
,這里我們刪除的是一個組合task
,所以會把子task
也一並刪除了:
dataflow:>task destroy timestamp-two
Destroyed task 'timestamp-two'
刪除所有task
,會有風險提示:
dataflow:>task all destroy
Really destroy all tasks? [y, n]: y
All tasks destroyed
dataflow:>task list
╔═════════╤═══════════════╤═══════════╤═══════════╗
║Task Name│Task Definition│description│Task Status║
╚═════════╧═══════════════╧═══════════╧═══════════╝
創建一個task
:
dataflow:>task create timestamp-pkslow-t1 --definition "timestamp --format=\"yyyy\"" --description "pkslow timestamp task"
Created new task 'timestamp-pkslow-t1'
啟動一個task
並查看狀態,啟動時需要記錄執行ID,然后通過執行ID來查詢狀態:
dataflow:>task launch timestamp-pkslow-t1
Launched task 'timestamp-pkslow-t1' with execution id 8
dataflow:>task execution status 8
查看所有task
執行並查看執行日志:
dataflow:>task execution list
dataflow:>task execution log 8
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.13.RELEASE)
2020-08-01 17:20:51.626 INFO 1 --- [ Thread-5] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-08-01 17:20:51.633 INFO 1 --- [ Thread-5] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
2.4 Http請求
可以進行http
請求:
dataflow:>http get https://www.pkslow.com
dataflow:>http post --target https://www.pkslow.com --data "data"
> POST (text/plain) https://www.pkslow.com data
> 405 METHOD_NOT_ALLOWED
Error sending data 'data' to 'https://www.pkslow.com'
2.5 讀取並執行文件
先准備一個腳本文件,用來放Data Flow Shell
命令,文件名為pkslow.shell
,內容如下:
version
date
app list
執行與結果如下:
dataflow:>script pkslow.shell
version
2.5.3.RELEASE
date
Sunday, August 2, 2020 1:59:34 AM CST
app list
╔═══╤══════╤═════════╤════╤════════════════════╗
║app│source│processor│sink│ task ║
╠═══╪══════╪═════════╪════╪════════════════════╣
║ │ │ │ │timestamp-pkslow ║
║ │ │ │ │composed-task-runner║
║ │ │ │ │timestamp-batch ║
║ │ │ │ │timestamp ║
╚═══╧══════╧═════════╧════╧════════════════════╝
Script required 0.045 seconds to execute
dataflow:>
但其實我們在CI/CD
的pipeline
中,並不想先啟動一個shell
命令行,然后再執行一個腳本。我們想一步到位,直接執行,執行完畢后退出shell
命令行。這也是有辦法的,可以在啟動的時候通過 --spring.shell.commandFile
指定文件,如果有多個文件則用逗號,
分隔。如下所示:
$ java -jar spring-cloud-dataflow-shell-2.5.3.RELEASE.jar --dataflow.uri=http://localhost:30093 --spring.shell.commandFile=pkslow.shell
Successfully targeted http://localhost:30093
2020-08-02T02:03:49+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - 2.5.3.RELEASE
2020-08-02T02:03:49+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - Sunday, August 2, 2020 2:03:49 AM CST
2020-08-02T02:03:49+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:309 -
╔═══╤══════╤═════════╤════╤════════════════════╗
║app│source│processor│sink│ task ║
╠═══╪══════╪═════════╪════╪════════════════════╣
║ │ │ │ │timestamp-pkslow ║
║ │ │ │ │composed-task-runner║
║ │ │ │ │timestamp-batch ║
║ │ │ │ │timestamp ║
╚═══╧══════╧═════════╧════╧════════════════════╝
$
執行完畢后,不會在shell
命令行模式里,而是退回linux
的終端。這正是我們所需要的。
我們來准備一個注冊應用——創建任務——執行任務
的腳本試試:
version
date
app register --name pkslow-app-1 --type task --uri docker:springcloudtask/timestamp-task:2.1.1.RELEASE
task create pkslow-task-1 --definition "pkslow-app-1"
task launch pkslow-task-1
執行與結果如下:
$ java -jar spring-cloud-dataflow-shell-2.5.3.RELEASE.jar --dataflow.uri=http://localhost:30093 --spring.shell.commandFile=pkslow.shell
Successfully targeted http://localhost:30093
2020-08-02T02:06:41+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - 2.5.3.RELEASE
2020-08-02T02:06:41+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - Sunday, August 2, 2020 2:06:41 AM CST
2020-08-02T02:06:41+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - Successfully registered application 'task:pkslow-app-1'
2020-08-02T02:06:42+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - Created new task 'pkslow-task-1'
2020-08-02T02:06:51+0800 INFO main o.s.c.d.s.DataflowJLineShellComponent:311 - Launched task 'pkslow-task-1' with execution id 9
這樣,我們就可以實現自動化打包與部署運行了。
3 一些使用技巧
強大的shell
工具提供了許多命令,其實不用一一記住,可以通過help
命令查看所有命令:
dataflow:>help
如果只對特定的一類命令感興趣,可以通過help xxx
的方式獲取幫助:
dataflow:>help version
* version - Displays shell version
dataflow:>help app
* app all unregister - Unregister all applications
* app default - Change the default application version
* app import - Register all applications listed in a properties file
* app info - Get information about an application
* app list - List all registered applications
* app register - Register a new application
* app unregister - Unregister an application
shell
還支持tab
鍵補全命令。
4 總結
本文的命令比較多,不想造成冗長,部分執行結果就不貼出來了,原文可到官網參考。
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...
多讀書,多分享;多寫作,多整理。