【华为云实战开发】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是什么?两者有什 ...
随机推荐
- Java 8 Time Api 使用指南-珍藏限量版
前面写过了Stream和Lambda,最近正想写Java 8的Time Api,小胖哥这个文章写得很好,就偷懒转载了. 1.概述 Java 8为Date和Time引入了新的API,以解决旧java.u ...
- 十、lambda表达式、内置函数之filter、map、reduce
lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 == : name = 'wupeiqi' else: name = 'ale ...
- Nginx下HTML页面POST请求静态JSON数据返回405状态
在浏览器访问HTML页面,发现一些静态JSON数据没有显示,F12查看,如下图所示: 可以看到请求方式为POST 将请求链接复制在浏览器地址栏访问,可以正常请求到数据 F12查看,可以看到请求方式为G ...
- Navicat Premium 12 永久使用办法
1.按步骤安装Navicat Premium,如果没有可以去官网下载:http://www.navicat.com.cn/download/navicat-premium 2.安装好后下载激活文件:h ...
- Kibana 的 docker 镜像使用
1.dockhub镜像网址:https://hub.docker.com/_/kibana 2.下载镜像: docker pull kibana:7.4.0 3.创建容器(Kibana 默认的端口为5 ...
- openpyxl模块
openpyxl模块 可以对Excel表格进行操作的模块 第三方模块需要下载 pip install openpyxl 配置永久第三方源: D:\Python36\Lib\site-packages\ ...
- 每天一道Rust-LeetCode(2019-06-01)
每天一道Rust-LeetCode(2019-06-01) 坚持每天一道题,刷题学习Rust. 题目描述 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的, ...
- 使用Git Flow进行版本控制
重置 # force reset $ git flow init -f
- ubunt 文件permission denied问题的解决
在linux系统使用过程中,升级python到3.6以后,执行pip命令,遇到permission denied问题,系统显示如下: -bash: /home/www/my_flask/venv/bi ...
- 学习-jdk8 特性
jdk8新特性 Lambda 表达式 Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中.方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构 ...