1 概述
1.1 文章目的
本文主要想为研发C++项目的企业或个人提供上云指导,通过本文中的示例项目 “音频解析器”,为开发者提供包括项目管理,代码托管,代码检查,编译构建,测试管理的操作指导,覆盖软件开发全生命周期。
1.2 项目详情
项目简介:音频采样器是一个C++应用程序,它可以从MP3、WAV、FLAC或Ogg Vorbis格式的音频文件中生成波形数据,波形数据可用于生成音频的可视化呈现,外观类似于音频编辑应用程序;除此之外,该应用程序还可以进行音频格式转换等功能,为音频处理者提供多种服务。
项目周期:3周(敏捷迭代开发)
构建环境:Ubuntu 16.04+GNU 5.4.0+Cmake3.5.1
部署环境:Ubuntu 14.04.5 LTS
华为云服务:软件开发服务 DevCloud
容器镜像服务 SWR
弹性云服务器 ECS
1.3 前提条件
注册华为云账号:华为云官网注册华为云账号,此账号适用于所有华为云产品。
弹性云服务器:部署将使用带有公网IP的ECS(ubuntu16.04),centos系统由于静态库不兼容会导致不确定的错误。
2 项目管理
2.1 创建项目
新建项目的开发流程包含两种类型:scrum流程、看板流程。Scrum流程是标准的敏捷开发流程,工作项层级为传统的scrum划分方法Epic->Feature->Story->Task&Bug,本项目为把工作划分的层级更清晰,选择了scrum流程。
2.2 创建迭代
本项目研发周期短,只有一次release,划分成三个迭代,迭代周期为一周。
2.3 梳理产品需求清单
项目规划是以思维导图的形式将工作项的层级结构展示出来,更直观的看到父子关系,在项目规划中新建工作项后,会自动生成到后面的Epic,Feature,Backlog和迭代页面,在迭代开始前,项目经理将从客户获取的所有需求信息,逐一落实到项目规划中,分解成story,并为工作项设置优先级。
2.4 输出迭代清单
在迭代开始前,在Backlog页面过滤出优先级“高”且重要程度为“关键”的工作项,纳入迭代1,与开发人员进行需求澄清。其余迭代,均可根据组内实际情况,按照优先级从高到低,重要程度减弱的顺序进行开发。
3 代码托管
3.1 创建仓库
新建代码仓库时,选择“模板新建”,在搜索框中输入已经被公开为示例模板的仓库名称,选择该模板。
输入新的仓库名称(可以和模板仓库同名),即可创建代码仓
4 构建&发布
4.1 构建工具
“CMake”是“cross platform make”的缩写,是一个跨平台的编译工具, 它比我们常用的“make”更高级,可以在CmakeLists.txt用简单的语句来描述所有平台的编译过程。为了说明CMake给编译带来的简化和优点,我们来简述一下C++语言从简单到复杂项目,涉及不同平台时编译的变化:单文件编译,仅仅一条g++ main.cpp命令即可生成可执行文件;当源文件越来越多,无法一条一条命令执行时,就需要make自动编译工具,开发人员需要做的就是写make执行时所需要依据的脚本——makefile;但是makefile抽象程度不高,对windows OS也不友好,cmake完美解决了这种多平台编译的问题。
Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。本项目使用的构建工具就是Cmake+gcc
4.2 镜像类型
镜像类型有三种,既可以选择DevCloud预定义的镜像,也可以选择Docker Hub或华为容器镜像服务SWR(SoftWare Repository for Container)中的公共镜像进行构建。
DevCloud推荐镜像,包含多种版本的Cmake和gcc工具供选择使用,目前最高支持cmake3.10.1-gcc7.3.0,这些推荐镜像仅仅安装了简单的构建工具和常用的软件包,对于大型、专业性较强的C++项目,需要在构建前安装大量的依赖包,这样如果在每次构建时都在推荐的构建环境中进行安装显然是不可取的,所以,我们可以自己创建包含工程依赖包的镜像,上传到SWR服务中,构建时直接使用。本项目中使用的就是SWR中自己上传的自有ubuntu镜像。
4.3 SWR镜像上传
在SWR服务中,点击“客户端上传”,会显示上传指导说明,本小节通过具体步骤辅助大家实践。
③ 查看构建镜像
④ 上传镜像
其中,org-pj为镜像所属组织,可以在SWR的“组织管理”创建。
⑤ 在SWR中查看上传镜像
⑥将镜像权限设置成“公开”,才能在构建任务中使用
⑦获取该镜像地址(docker pull后面内容),在构建任务中使用
4.4 创建构建任务
新建任务,输入任务名,选择源码仓库
不使用模板,直接创建任务
点击左侧“+”,选择“使用SWR公共镜像”操作类型
输入构建详细信息
5 发布
本项目中发布服务有两个作用,其一,将构建生成的可执行文件上传到发布仓库,便于软件包管理;其二,将部署中用到的mp3文件,预先手动上传至发布仓库,部署中将直接使用。
5.1 发布软件包
将可执行文件和启动脚本startup.sh使用shell命令打成压缩包
将压缩包上传到软件发布仓库
5.2 上传依赖文件
点击“上传”按钮,将一个压缩好的MP3压缩文件上传至软件发布库,在部署时,将使用生成的可执行文件解析该音频文件,该文件可以用任意MP3文件替代。
6 部署
6.1 C++可执行文件
该项目生成了一个可执行文件audiowaveform, 在linux系统中可以通过命令查看详细信息。
如果发现自己的文件无法执行,可以通过chmod 777 audiowaveform命令将文件置成可执行(r:读,w:写,x:可执行)。
如果发现直接执行audiowaveform失败,可能是由于环境变量导致的,可以通过./ audiowaveform来执行
该可执行文件应用于linux系统上,不同于可视化窗口操作,它是通过终端命令进行交互,操作命令可以查看帮助信息:
6.2主机授信
将服务器主机授信到DevCloud里,用于部署网站。
点击“设置-通用设置-主机组管理”,将服务器以主机组的形式授信到项目当中。
在主机组中添加主机:
6.3模板部署任务
Ø 新建部署任务,部署类型选择“模板任务”
Ø 填写部署任务名称,不使用模板直接创建。
Ø 添加以下部署步骤:
选择部署来源(部署软件包)、选择部署来源(MP3文件)、解压文件、删除文件、执行shell命令
(1) 选择部署来源。
(2) 解压文件。(解压路径应与启动脚本startup.sh中的路径匹配)
(3)删除文件。
(4)执行shell命令:startup.sh启动脚本已经在解压文件步骤中解压到相应路径下了。
6.4 查看部署效果
根据startup.sh中的执行命令,最终生成了test.png音频采样图片,可以通过FTP将图片从远端ECS服务器上下载到本地查看。
至此,恭喜您打通了DevCloud的各服务,完成了C++云上开发环境的搭建
华为云DevCloud,5人以下额度范围内,可以免费使用,并且可以预约免费的产品演示和技术交流,详情查看华为云官网