【华为云实战开发】10.经典的C++项目怎么在云端开发?【华为云技术分享】
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人以下额度范围内,可以免费使用,并且可以预约免费的产品演示和技术交流,详情查看华为云官网
【华为云实战开发】10.经典的C++项目怎么在云端开发?【华为云技术分享】的更多相关文章
- 【华为云实战开发】9.如何进行PHP项目的快速搭建并实现CICD?【华为云技术分享】
1 概述 1.1 文章目的 本文主要想为研发PHP项目的企业或个人提供上云指导,通过本文中的示例项目 “workerman-todpole”,为开发者提供包括项目管理,代码托管,代码检查,编译构建,测 ...
- 不服跑个分:ARM鲲鹏云服务器实战评测——华为云鲲鹏KC1实例 vs. 阿里云G5实例【华为云技术分享】
原文链接:https://m.ithome.com/html/444828.htm 今年一月份,华为正式发布了鲲鹏920数据中心高性能处理器,该处理器兼容ARM架构,采用7纳米制造,最高支持64核,主 ...
- Apworks框架实战(四):使用Visual Studio开发面向经典分层架构的应用程序:从EasyMemo案例开始
时隔一年,继续我们的Apworks框架之旅.在接下来的文章中,我将逐渐向大家介绍如何在Visual Studio中结合Apworks框架,使用ASP.NET Web API和MVC来开发面向经典分层架 ...
- 移动端开发语言的未来的猜想#华为云·寻找黑马程序员#【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- 华为云ModelArts 2.0全面升级,革新传统AI开发模式
[中国,上海,9月20日] 在HUAWEI CONNECT 2019期间,华为云EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台ModelArts 2.0. 现场 ...
- 【华为云技术分享】MongoDB经典故障系列五:sharding集群执行sh.stopBalancer()命令被卡住怎么办?
[摘要] MongoDB sharding集群执行sh.stopBalancer()命令时被卡住怎么办?别慌,华为云数据库来给您支招,收下这份方案指南,让您分分钟远离被自建MongoDB数据库支配的恐 ...
- [转]3天搞定的小型B/S内部管理类软件定制开发项目【软件开发实战10步骤详解】
本文转自:http://www.cnblogs.com/jirigala/archive/2010/10/07/1845275.html 2010-10-07 21:39 by 通用C#系统架构, 5 ...
- linux一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书)
一句话问答(网络无关篇+网络相关篇+程序开发篇+经典图书) --------------------------目录-网络无关篇-目录-------------------------- 0001 修 ...
- 【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚【华为云技术分享】
文:姚冬(华为云DevCloud首席技术布道师,资深DevOps与精益/敏捷专家,金融解决方案技术Leader,中国DevOpsDays社区核心组织者) 前言 敏捷是什么?DevOps是什么?两者有什 ...
随机推荐
- Python的变量命名规则
1.只能用大小写字母与“_”(下划线) 2.数字不能用在开头,如:12tea 3.不能使用空格 4.C语言的变量命名规则如上相同
- Linux自有服务(1)-Linux从入门到精通第五天(非原创)
文章大纲 一.运行模式二.用户与用户组管理(重点)三.网络设置四.ssh服务(重点)五.学习资料下载六.参考文章 自有服务,即不需要用户独立去安装的软件的服务,而是当系统安装好之后就可以直接使用的 ...
- 网络编程(二)--TCP协议、基于tcp协议的套接字socket
一.TCP协议(Transmission Control Protocol 传输控制协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会 ...
- 超强的Lambda Stream流操作
原文:https://www.cnblogs.com/niumoo/p/11880172.html 在使用 Stream 流操作之前你应该先了解 Lambda 相关知识,如果还不了解,可以参考之前文章 ...
- Sigmoid函数与Softmax函数的理解
1. Sigmod 函数 1.1 函数性质以及优点 其实logistic函数也就是经常说的sigmoid函数,它的几何形状也就是一条sigmoid曲线(S型曲线). 其中z ...
- JAVA类与类之间的关系及代码示例
参考链接:https://blog.csdn.net/wq6ylg08/article/details/81092056
- vs2008 vc90.pdb 不是创建此预编译头时使用的 pdb 文件,请重新创建预编译头
解决方案: 找到项目中的stdafx.cpp,右键属性,找到C/C++->预编译头, 设置为创建预编译头, 重新生成
- Java 字符流读写文件
据说,java读写文件要写很多,贼麻烦,不像c艹,几行代码就搞定.只能抄抄模板拿来用了. 输入输出流分字节流和字符流.先看看字符流的操作,字节转化为字符也可读写. 一.写入文件 1.FileWrite ...
- Windbg Call Stack(调用堆栈)窗口的使用
调用堆栈是指向程序计数器当前位置的函数调用链.调用堆栈的顶部函数是当前函数,下一个函数是调用当前函数的函数,依此类推.显示的调用堆栈基于当前程序计数器,除非更改寄存器上下文. 在 WinDbg 中,可 ...
- 格利文科定理(Glivenko–Cantelli Theorem)
格利文科定理:每次从总体中随机抽取1个样本,这样抽取很多次后,样本的分布会趋近于总体分布.也可以理解为:从总体中抽取容量为n的样本,样本容量n越大,样本的分布越趋近于总体分布. (注:总体数据需要独立 ...