华为云DevOps系列之 —— 持续部署与发布(六)自动化编译构建
【摘要】 华为云DevOps系列之 —— 持续部署与发布(六)自动化编译构建
什么是编译构建
编译构建
是指把软件的源代码
编译成目标文件
,并把配置文件和资源文件等打包的过程输入
是源代码文件、库文件、配置文件、资源文件等输出
是软件包:一个可以直接部署的软件,或者是一个可以被其他软件使用的 lib编译器
完成编译过程,编译管理(构建)工具
完成“构建”过程- 下图为一个 JavaWeb 程序,我们编写的
.java
文件编译成为.class
字节码文件,运行起来光字节码(或者机器码)是不够的,里面可能还会涉及到一些依赖的自由文件(比如图片文件、配置文件) ,最后通过打包把一些所谓的低级语言文件(如图中class文件+配置文件、资源文件)生成一个可以运行的 war 包,war 包运行后用户就能在页面上访问到程序
编译构建的挑战
环境搭建耗时耗力,且易因环境差异引入问题(Window、Linux)
:比如要开发 Java 程序,就要装一些所谓的环境(编译器、编译构建工具、tomcat等等)本地硬件配置不高,编译速度慢
:现在都讲究快,但是快的前提是其他的资源能跟得上,但其他资源是有代价的突发项目资源消耗大,结束后闲置
:比如淘宝双11那一天可能会有大量的用户访问,可能需要增加服务器,但是双11过后,用户访问量骤降,之前增加的服务器就要闲置;编译构建也是一样的,比如今天资源消耗很大,就需要很多高配的机器或者大量的机器,高峰期一过就闲置了多语言不能并行构建
:并行构建是一个工程化功能,开发人员想在本地进行并行构建是比较麻烦的
编译构建是 DevOps 的基础
- 在我们正常的持续集成(CI)、持续交付(CD)的过程中,构建(build)是其中必不可少的一个环节,面对编译构建的很多问题我们是逃避不了的
- CD(持续集成)/ CD(持续交付)流水线是 DevOps 的基础实践
- 编译构建(build)是 CI(持续集成)最基础环节
- CI(持续集成)的其他环节,如代码检查、单元测试等,都高度依赖编译构建
流行的编译构建工具
编程语言 | 构建工具 |
---|---|
JavaScript | NPM/Gulp/Grunt |
Java | Gradle/Maven/Ant |
C/C++ | Make/CMake |
Python | Setuptool/PyInstaller |
C# | MSBuild |
编译构建工具演化史
单机开发
- 典型构建工具:Eclipse
- 工具特点:在个人工作环境直接构建,打包
- 优势:容易上手,简单快捷
- 劣势:自动化能力差,协作开发能力差
协作开发
- 典型构建工具:Ant
- 工具特点:增加了依赖包管理,及打包过程描述
- 优势:支持自动化,支持协作开发
- 劣势:依赖库的获取和管理非常困难
全球协作
- 典型构建工具:Maven/Gradle
- 工具特点:远程依赖仓库,全球统一的中央仓库
- 优势:不需本地管理依赖包
- 劣势:使用复杂度增加,需要联网(实时下载)
Java 构建工具
- Java 开发圈中,目前最主流的有以下三个开发工具,依赖管理已经成为了项目构建自动化工具中的一个主要部分
Maven
- Maven 是 Apache 下一个纯 Java 开发的开源项目,基于项目对象模型(POM),可以对 Java 项目进行构建、依赖管理
- 它奉行约定优于配置(Convention Over Configuration)原则
- Maven 官网链接:http://maven.apache.org/
- Maven 下载安装:http://maven.apache.org/download.cgi
- Maven 安装指导:http://maven.apache.org/install.html
Maven 依赖管理
- 我们在开发程序时需要依赖一个第三方 jar 包,那如何指定这个 jar 包的位置?可以使用 GAV 来唯一标识一个依赖
- G(groupId):组ID,以华为为例,
com.huawei
- A(artifactId):包名,比如图中
kryo
包名 - V(version):版本号
- G(groupId):组ID,以华为为例,
pom.xml
文件定义包的列表(如上图)- 我们在网页上通过 GAV 的方式也能访问到这些包
Maven 仓库分类
-
本地仓库
- 存储在本地磁盘
- 默认在
${user.home}/.m2
下
-
远程仓库
- Maven 代理仓库,可以加快 jar 下载速度
- Maven 代理仓库,可以加快 jar 下载速度
-
中央仓库
- Maven 团队维护的 jar 包仓库(http://repo1.maven.org/maven2)
- Maven 团队维护的 jar 包仓库(http://repo1.maven.org/maven2)
Maven 仓库搜索顺序
- 本地仓库搜索
- 本地仓库没有找到,直接返回
- 本地仓库没有找到,去远程仓库搜索
- 远程仓库搜索
- 没有配置远程仓库,去中央仓库搜索
- 远程仓库找到,下载到本地仓库
- 远程仓库没有找到,搜索下一个远程仓,依次类推,如果所有远程仓都没未找到,搜索中央仓
- 中央仓库搜索
- 中央仓库找到,下载到本地仓库
- 中央仓库没有找到,前台打印错误信息
编译构建实践
Maven 构建
- 根据源代码、资源文件、配置文件等生成一个 war 包
CMake 构建
- 针对 C/++ 的一个构建工具,将依赖文件、代码文件等通过 CMake 生成 Makefile,再通过 make 生成可执行文件 exe、out…
容器镜像构建
- Dockerfile 是一个文本格式的配置文件,包含创建镜像所需要的全部指令
- 基于 Dockerfile 中的指令,用户可以快速创建自定义的镜像
FROM
指定一个基础镜像RUN
运行命令COPY
添加本地数据到容器CMD
容器默认运行的命令
最后,欢迎大家关注我的个人微信公众号 『小小猿若尘』,获取更多IT技术、干货知识、热点资讯。同时,我在公众号中分享了精心整理的一些视频资料(包括 Python全栈教程、AI教程、前端、数据库等),大家回复相应关键词即可获取网盘视频链接,感谢大家的关注😊
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)