Skip to content

Latest commit

 

History

History

deployer

OCNT下位机(ARM)自动部署软件Deployer

1. 目的(Purpose)

在向ARM板部署软件时, 每次都是相同的操作,唯一不同就是修改对应的IP地址与端口号。以前OCNT的规模比较小,只是3-5块少量的ARM板,目前OCNT的规模升级到20左右的ARM板,一旦ARM板上程序有变化,部署将会变得十分麻烦,需要将ARM板拔下,接到电脑上,一遍遍的重复烧写后,再接到平台上,过程十分繁琐,拔线再接线增加了硬件接线错误的几率(毕竟要重新接20个板子)。同时,由于烧写与配置需要一点点嵌入式知识,烧写工作目前只能由下位机软件维护者进行,这样是不太稳妥的。基于以上的原因,OCNT平台就迫切需要一个能够自动化部署、向上封装烧写细节的工具。

总之,完成此工具的哲学就是:

DRY(Don't Repeat Yourself)!讨厌一切重复的工作,自动化一切可以自动化的部分,让机器做这类它擅长的工作!

2. 功能(Features)

  • 文件上传:通过ftp将指定文件上传到ARM板上
  • 远程控制:通过telnet远程登录到ARM板后发送命令进行控制
  • 操作记录:文件上传与远程控制的每一步都有成功与否的反馈,具体的交互情况也会写入指定log中
  • 动态配置:所有可变的配置全部从json格式的配置文件读取,因此可根据不同需要修改配置文件,无需重编译软件
  • 启动脚本生成:启动脚本一般是修改成不同IP地址,其他都相同,根据输入,可生成期望的启动脚本

3. 设计(Design)

3.1 指导思想(Guideline)

  1. 面向对象设计:用C语言也可以将面向对象设计做的很优雅
  2. 使用测试驱动开发:每次迭代一小点,验证,重构
  3. 灵活的设计:将配置文档化,消除不必要的硬编码;使用回调让各个模块解耦;使用状态机处理流程
  4. 不怕从头造轮子:通过造轮子的过程锻炼编程,掌握对应知识,再通过看别人高大上的轮子来反思自己的不足,学习别人的精华

3.2 结构(Structure)

  • Ftp Uploader:Ftp上传模块,封装文件上传操作
  • Telnet Commander:Telnet控制模块,封装Telnet命令操作,基于libtelnet库
  • Logger:交互记录模块,负责记录交互情况,供出错时检查
  • Deployer:顶层模块,负责读取与检查配置文件,根据配置文件中目标板部署期望的文件
  • DList:双向链表模块
  • cJSON:Json解析生成的第三方库
  • libtelnet:Telnet的第三方库,这里用于协商部分

4. 用法(Usage)

./deployer [config]

根据需要修改配置文件即可。如果不指定配置文件,则默认的配置文件为./deployer.conf。

Json格式配置文件解析如下:

  • ftp:Ftp相关配置
    • username:Ftp用户名
    • password:Ftp密码
  • telnet:Telnet相关配置
    • username:Telnet用户名
    • password:Telnet密码
    • command file:远程控制命令文件
  • deploy targets:目标ARM板IP地址的列表
  • deploy files:部署文件列表

需要注意的是:

  1. 没有密码时也需要保留password键值对,值填空字符出""
  2. 远程控制命令文件不是脚本,不支持注释,只是命令的集合,一行代表一条命令,命令的执行顺序与命令在文件中的前后顺序一致
  3. deployer_config_json.h头文件定义配置文件中键值对的“键”,以及默认的配置文件名称
  4. 配置文件可以通过tools下的config_json_generator.c生成