概述

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.1 创建项目

新建项目的开发流程包含两种类型:scrum流程、看板流程。Scrum流程是标准的敏捷开发流程,工作项层级为传统的scrum划分方法Epic->Feature->Story->Task&Bug,本项目为把工作划分的层级更清晰,选择了scrum流程。

2.2 创建迭代

本项目研发周期短,只有一次release,划分成三个迭代,迭代周期为一周。

2.3 梳理产品需求清单

项目规划是以思维导图的形式将工作项的层级结构展示出来,更直观的看到父子关系,在项目规划中新建工作项后,会自动生成到后面的Epic,Feature,Backlog和迭代页面,在迭代开始前,项目经理将从客户获取的所有需求信息,逐一落实到项目规划中,分解成story,并为工作项设置优先级。

2.4 输出迭代清单

在迭代开始前,在Backlog页面过滤出优先级“高”且重要程度为“关键”的工作项,纳入迭代1,与开发人员进行需求澄清。其余迭代,均可根据组内实际情况,按照优先级从高到低,重要程度减弱的顺序进行开发。

代码托管

3.1 创建仓库

新建代码仓库时,选择“模板新建”,在搜索框中输入已经被公开为示例模板的仓库名称,选择该模板。

输入新的仓库名称(可以和模板仓库同名),即可创建代码仓

构建&发布

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公共镜像”操作类型

输入构建详细信息

发布

本项目中发布服务有两个作用,其一,将构建生成的可执行文件上传到发布仓库,便于软件包管理;其二,将部署中用到的mp3文件,预先手动上传至发布仓库,部署中将直接使用。

5.1 发布软件包

将可执行文件和启动脚本startup.sh使用shell命令打成压缩包

将压缩包上传到软件发布仓库

5.2 上传依赖文件

点击“上传”按钮,将一个压缩好的MP3压缩文件上传至软件发布库,在部署时,将使用生成的可执行文件解析该音频文件,该文件可以用任意MP3文件替代。

部署

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++项目怎么在云端开发?相关推荐

  1. 斯坦福DAWNBench最新训练排名!华为云ModelArts用时10分28秒获全球最快

    允中 发自 凹非寺  量子位 报道 | 公众号 QbitAI 还记得ModelArts吗? 这是今年华为最新发布的AI开发平台,可以提供包括数据标注准备.模型训练.模型调优.模型部署等AI应用开发服务 ...

  2. 30亿参数,华为云发布全球最大预训练模型,开启工业化AI开发新模式

    本文分享自华为云社区<HDC.Cloud 2021 | 华为云发布全球最大预训练模型,开启工业化AI开发新模式>,原文作者:技术火炬手 . 4月25日,华为云发布盘古系列超大规模预训练模型 ...

  3. 华为云ModelArts 2.0全面升级,革新传统AI开发模式

    [中国,上海,9月20日] 在HUAWEI CONNECT 2019期间,华为云EI服务产品部总经理贾永利宣布--华为云AI重装升级,并重磅发布一站式AI开发管理平台ModelArts 2.0. 现场 ...

  4. 【华为云实战开发】16.DevOps交付模式下的软件测试

    文:华为云DevCloud  兵东 众所周知,近10年IT领域有两个关键的风向转变,传统IT向云计算转变,传统瀑布和迭代开发模式向敏捷开发模式转变.这两个转变促成了DevOps产品交付模式的出现.互联 ...

  5. 【华为云实战开发】13.如何在云端快速搭建python网站

    1 概述 1.1 文章目的 本文主要想为研发Python项目的企业或个人提供上云指导,通过本文中的示例项目 "AI物体检测",为开发者提供包括项目管理,代码托管,代码检查,编译构建 ...

  6. 【华为云实战开发】12.如何在云端快速开展Swagger接口测试

    1 Swagger简介 1.1 概要 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 总体目标是使客户端和文件系统作为服务器以同样的速度来 ...

  7. 【华为云实战开发】9.如何进行PHP项目的快速搭建并实现CICD?

    1 概述 1.1 文章目的 本文主要想为研发PHP项目的企业或个人提供上云指导,通过本文中的示例项目 "workerman-todpole",为开发者提供包括项目管理,代码托管,代 ...

  8. 【华为云实战开发】6.Cocos游戏项目如何在云端开发

    1 概述 1.1 文章目的 本文帮助想要或者正在将Cocos项目迁移到华为软件开发服务DevCloud中的用户,把本地Cocos在Android平台下的项目迁移到云上. 1.2 项目详情 1. 项目名 ...

  9. 【华为云实战开发】2.Docker镜像部署怎么玩才酷炫?

    1 文章目的 本文主要帮助想要或者正在使用容器部署服务的用户,如何将他们的应用部署通过DevCloud部署在华为云上. 2 概述 2.1 Docker Docker是一个开源的引擎,可以轻松的为任何应 ...

最新文章

  1. 《强化学习周刊》第13期:强化学习应用之金融
  2. java程序运行必须得三个io类_Java基础知识(三)
  3. Docverter – 文本文件轻松转换为 PDF,Docx 和 ePub 文件
  4. 商桥物流完成达晨创投领投2.5亿元A+轮融资,创建立体化零担物流网络
  5. 应用安全-提权/降权相关整理
  6. infopath视图切换
  7. python简单计算器下载安装到手机_python计算器app下载
  8. 油猴脚本(Tampermonkey)的简介
  9. 数学建模 —— 评价模型
  10. js小游戏 (飞行的小鸟--canvas)
  11. No gradients provided for any variable, check your graph for ops that do not support gradients
  12. 微信公众 mysql回复图片_微信公众号开发之微信公共平台消息回复类实例
  13. 地级市各产业从业人数数据集(1999-2018年)
  14. Dead Connection Detection(DCD)
  15. Word论文中关于章、节、图、表、公式自动编号及引用
  16. 计算机网络工程专业毕业论文,网络工程参考文献
  17. 特殊类型二项式和椭圆积分
  18. 系统定制修改之修改 chrome 浏览器默认主页为指定网址
  19. 数字二阶低通滤波器公式推导及代码实现
  20. 戴尔电脑cpu温度过高怎么办

热门文章

  1. 正在等待缓存锁:无法获得锁_一句话说清分布式锁,进程锁,线程锁
  2. java 正規表示 group_经验分享|Java+百度AI实现人脸识别
  3. netty在项目中实际使用_公房动迁中,实际使用人享有哪些利益?
  4. ECMAScript 6 之 let 和 const 命令
  5. python 基于机器学习识别验证码
  6. 快速简单高效的搭建 SolrCloud 集群
  7. Leaflet使用vector tiles 标注label设置
  8. VC消息传递(对话框间传递参数)
  9. 源码研究:php变量
  10. 听 Fabien Potencier 谈Symfony2 之 《What is Symfony2 ?》