华为云DevOps系列之 —— 持续部署与发布(六)自动化编译构建

举报
ruochen 发表于 2021/08/31 12:42:17 2021/08/31
【摘要】 华为云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 依赖管理

  • 我们在开发程序时需要依赖一个第三方 jar 包,那如何指定这个 jar 包的位置?可以使用 GAV 来唯一标识一个依赖
    • G(groupId):组ID,以华为为例,com.huawei
    • A(artifactId):包名,比如图中 kryo 包名
    • V(version):版本号
  • pom.xml 文件定义包的列表(如上图)
  • 我们在网页上通过 GAV 的方式也能访问到这些包

Maven 仓库分类

  • 本地仓库

    • 存储在本地磁盘
    • 默认在 ${user.home}/.m2
  • 远程仓库

    • Maven 代理仓库,可以加快 jar 下载速度
  • 中央仓库

Maven 仓库搜索顺序

  • 本地仓库搜索
    • 本地仓库没有找到,直接返回
    • 本地仓库没有找到,去远程仓库搜索
  • 远程仓库搜索
    • 没有配置远程仓库,去中央仓库搜索
    • 远程仓库找到,下载到本地仓库
    • 远程仓库没有找到,搜索下一个远程仓,依次类推,如果所有远程仓都没未找到,搜索中央仓
  • 中央仓库搜索
    • 中央仓库找到,下载到本地仓库
    • 中央仓库没有找到,前台打印错误信息

编译构建实践

Maven 构建

  • 根据源代码、资源文件、配置文件等生成一个 war 包

CMake 构建

  • 针对 C/++ 的一个构建工具,将依赖文件、代码文件等通过 CMake 生成 Makefile,再通过 make 生成可执行文件 exe、out…

容器镜像构建

  • Dockerfile 是一个文本格式的配置文件,包含创建镜像所需要的全部指令
  • 基于 Dockerfile 中的指令,用户可以快速创建自定义的镜像
    • FROM 指定一个基础镜像
    • RUN 运行命令
    • COPY 添加本地数据到容器
    • CMD 容器默认运行的命令

最后,欢迎大家关注我的个人微信公众号 『小小猿若尘』,获取更多IT技术、干货知识、热点资讯。同时,我在公众号中分享了精心整理的一些视频资料(包括 Python全栈教程、AI教程、前端、数据库等),大家回复相应关键词即可获取网盘视频链接,感谢大家的关注😊

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。