【转】自动化构建、自动化部署发布一览

转自:自动化构建、自动化部署发布一览 - 知乎

在软件系统开发的过程中,一个项目工程通常会包含很多的代码文件、配置文件、第三方文件、图片、样式文件等等,是如何将这些文件有效的组装起来最终形成一个可以流畅使用的应用程序的呢?答案是借助构建工具或策略。就好像一场大型音乐会上总指挥将不同的管弦乐有效的协调起来,完成一场精彩绝伦的演出。而如果在构建的过程中依赖人手工进行编译,工作起来会很繁琐,于是就有了自动化构建、自动化发布、部署的想法和探索,通过使用程序自动化的完成系列操作,将大大提升工作效率。

我们日常接触到的通常有前端和后端的开发项目,前端使用框架又通常有jQuery、vue、react等,后端又有C\C++、Java、Python、Go、node等不同编程语言的不同框架项目,每种开发框架使用的构建工具会有一定的区别,但在做自动化构建的思路上有一定的相通性,这里找几款工具来说一下自动化构建、发布的过程、思路和原则。

一、Make\Cmake

如果在Linux系统上使用过开源项目的同学可能了解过make、makefile,首先系统已安装了gcc或g++等C环境编译器,我们通常下载完开源源代码并执行make,程序就自动的按照makefile中约定的规则将.c或.cpp的文件编译成可执行的程序文件,通常执行make install 将编译好的程序、配置文件放置到指定的目录下完成程序的部署安装。当然这里说的是编译别人已经写的程序,如果是自己从头到尾的开发C、C++项目,则需要自己来编写makefile文件,makefile就是一系列的规则约束,将不同的程序文件链接起来,就好像一个演出,每个演员有自己的剧本和台词,还有一个负责将不同演员衔接好并按照既定的剧情推进的连接人----导演。Cmake可以理解为Make的升级版,不需要编写复杂的makefile文件,而是通过Cmakelist来自动生成makefile,不过Cmakelist也是一种编译的规则约束,相对makefile更简约一些。

二、Ant\Maven

在构建Java类的项目时,通常采用的有Ant、Maven和Gradle。当然也可以手工写脚本借助javac编译或通过IDE等相对原始的构建方式,不过追本溯源Ant、Maven和Gradle也都是基于原始的构建原则进行封装,从而提供更友好、更有效率的构建流程。Ant是通过l编写build.xm构建规则进行程序的编译打包,有点类似makefile。Maven和Gradle都采用包依赖的方式进行管理,Maven的POM.xml用groupId、artifactId、version组成的Coordination(坐标)唯一标识一个依赖,Gradle的思路和Maven类似但做法上不同,它包含build.gradle和settings.gradle两个文件。Maven和Gradle有仓库的概念,用于存放项目依赖的第三方库,这样在制作war包时不用把所有依赖的第三方文件都放到里面,而是实际程序启动时根据环境的设置找对应的依赖文件,不过Ant制作的war包是提前把依赖的文件都放进去。

三、Grunt、Gulp、Webpack

前端的构建工具常见的有Grunt、Gulp、Webpack三种,gulp是一个自动化构建工具,是Grunt的升级版,主要用来设定程序自动处理静态资源的工作,也即是对前端项目资源进行打包,通常有些项目文件很大,使用Gulp压缩之后文件的体积就变的很小而功能不减。Webpack侧重于前端模块的打包,最初Webpack本身就是为前端JS代码打包而设计的,后来被扩展到其他资源的打包处理。Webpack是通过loader(加载器)和plugins(插件)对资源进行处理的。Gulp是对整个前端资源进行整合、归置,至于文件之间的调用关系是不做具体的管理,而Webpack是通过解析文件之间的引用关系进行资源的管理。

四、Jenkins

Jenkins是一个集构建、发布、部署为一体的综合性工具,DevOps中常提到CI/CD(自动化构建、部署),但它本身是不提供构建、发布和部署的功能,而是可以在其上安装插件的方式与其他构建、发布、部署工具形成连动,它更像是一个集成能力特别强的调度、协调工具,借助于它的这种特性,现在通常的做法是用户提交代码到版本仓库(GitHub、GitLab),Jenkins定期从仓库中获取最新代码并调用打包工具进行项目构建,构建成功后将程序包写入到docker镜像推送到镜像服务器,进而通知应用服务器拉取镜像文件启动应用。当然中间的流程根据实际的情况有所不同,比如构建war包部署到tomcat服务器中,亦或者Android 应用构建apk包发布到应用商店,供下载验证。

限于篇幅的原因,没有对各类构建工具进行更详细的说明和操作展示,自动化构建、发布部署的产品也不止这些,GitLab的runner也能实现类似的功能效果,本文的这些将会在后续分别进行深入更细致的介绍。本文更希望透过工具本身了解工具设计的思路和原则,并尽可能的将这些思路用在我们的产品研发以及处理问题上。

文中提到的这些工具都是被广泛使用、经得住使用考验的好产品,首先它们都是立足于解决实际工作中迫切的问题,其次操作使用较友好,另外设计的产品通用性较强,不是陷于某一类具体的问题,而是从更广泛的角度抽取出本质性的解决方案。再者具有较好的兼容性,特别是Jenkins,能够与主流开发过程很好的契合,很好的打通、解决了一连串构建、发布、部署的壁垒,它的设计理念不是什么都由我自己来做,而是提供对接的方式将成熟好用的产品嵌合进来,形成一个更强大的“航空母舰”平台。就好像苹果公司生产的iPhone,手机的零件都不苹果自己生产,而是集众人之所长充分发挥其特性,以更流畅、更顺滑的方式将所有内容串联起来,做成一直被别人模仿的引领性产品。这对我们的产品开发、设计甚至做事的方式都是很好的启示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

承博士:让云计算落地生根的中国云计算平台

2010-01-22 09:48:41 [0评论 ] 金蝶中间件秉承自主创新,努力打造自主知识产权的云计算平台;金蝶Apusic云计算解决方案是为大型企业和组织提供私有云的解决方案,通过云计算中间件平台,为云计算提供落地的务实价值。金蝶中间件与国际厂商合作&…

Microsoft Windows CE .NET 中的中断体系结构

概述 通过 Microsoft Windows CE .NET,Microsoft 已经升级了 Windows CE 的中断体系结构。该操作系统 (OS) 所具有的处理共享中断的能力极大地扩展了 Windows CE .NET 支持许多中断体系结构的能力。本文从原始设备制造商 (OEM) 和应用程序开发人员的角度探讨了处理…

微软企业库5.0学习笔记(三十三)数据访问模块

前言 鉴于企业库5.0已经发布正式版,同时有广大读者的要求(臭屁一下,o(∩_∩)o...),后面文章的内容和代码将基于Enterprise Library5.0和Unity2.0来写,感谢大家的一贯支持。 正文 数据库访问模块都能实现哪些…

ARM中断分析之一:中断控制器和CPU、外设的关系

“中断控制器”也是CPU众多外设中的一个,不同的是,它一方面接收其它外设中断引脚的输入,另一方面,它会发出中断信号给CPU。下图是一张中断控制器外设的框图,s3c2410的框图。 为了把中断控制器、CPU、外设联系起来&…

【转】Jenkins项目常用三种构建类型风格详解

转自:Jenkins项目常用三种构建类型风格详解_ぃ小小宇宙的博客-CSDN博客_jenkins项目类型 Jenkins构建的项目类型介绍 jenkins 的安装配置请参考:《jenkins war包安装部署,tomcatJDKmaven》 Jenkins中自动构建项目的类型有很多,…

ARM中断分析之二:裸机下面的中断处理

EINT4中断的裸机处理 这是基于S3C2410的EINT4中断的裸机处理,当中断发生时就把LED灯取反显示。下面是电路图。 上面是外部KEY连接到CPU的EINT4引脚上面,即:按下键就会产生一个中断。 按照先前介绍的,中断处理流程来介绍&#xff0…

【转】Jenkins 构建触发器操作详解

转自:Jenkins 构建触发器操作详解 - 习久性成 - 博客园 前言 触发远程构建 【https://www.cnblogs.com/Rocky_/p/8297260.html】 例如,使用脚本:通过一个网址的访问来触发构建,这样就不需要登录jenkins系统也能触发构建了。 示…

ARM中断分析之三:WinCE驱动的中断分析

现在有许多高端的ARM芯片,像苹果、三星、华为都采用ARM芯片做为智能手机芯片。 这篇文章介绍基于ARM的WinCE操作系统的驱动的中断分析。WinCE驱动分为两类,这里介绍流驱动,流驱动比较简单。 关于流驱动,下面是一张框图&#xff0c…

【转】密码破解全能工具:Hashcat密码破解攻略

转自:密码破解全能工具:Hashcat密码破解攻略 - FreeBuf网络安全行业门户 Hashcat密码破解 hashcat号称世界上最快的密码破解,世界上第一个和唯一的基于GPGPU规则引擎,免费多GPU(高达128个GPU)&#xff0c…

基于Visual Studio2010讲解LINQ读出数据库数据生成XML

LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,可以在 .NET Framework 编程语言中处理 XML。 LINQ to XML 最重要的优势是它与 Language-Integrated Query (LINQ) 的集成。 由于实现了这一集成,因此,可以对内存 XML…

【转】详解JS的四种异步解决方案:回调函数、Promise、Generator、async/await

转自:详解JS的四种异步解决方案:回调函数、Promise、Generator、async/await 同步&异步的概念 在讲这四种异步方案之前,我们先来明确一下同步和异步的概念: 所谓同步(synchronization),简单来说,就是…

wince6.0 s5pv210 中断

1. 在smdkv210\src\oal\oallib\ksarm.h头文件里可以看到wince的中断定义。 设备中断的起始编号即wince预定义的设备中断ID的基值 SYSINTR_DEVICES EQU 8 一共支持64个设备中断 SYSINTR_MAX_DEVICES EQU 64 可用的设备…

【转】vsftp配置实例-虚拟用户锁定目录

转自: vsftp配置实例-虚拟用户锁定目录_jasonyang69的博客-CSDN博客_vsftpd锁定用户目录 快速解决 vsftpd nologin 虚拟用户 拒绝访问 无法登录_小飞飞飞鱼的博客-CSDN博客_vsftpd 拒绝访问 一、实验步骤 0、启用 nologin shell #vim /etc/shells /bin/sh /bi…

【转】高端球管使用了哪些高科技?

转自:高端球管使用了哪些高科技? 本文来源:第三方维修平台 本文作者:RepairCT 随着人类发现X射线,这项技术不断应用到医学领域,比如X光机、DR、CT、乳腺钼靶等医疗设备,它们的主要核心均是利用…

关于代码组织的一些看法(上)

今天看了一个篇关于架构的文章,略有所感,记录一下。 软件的架构基本是从一个原始需求出发,逐步构建可维护、更灵活的开发框架的过程,在这个构建过程中可能会逐渐的增加代码的复杂度来满足灵活性的要求,从这个层面来讲&…

CE下基于Zylonite硬件平台的SD卡驱动开发

摘要:本文结合实际项目(一款以WINCE为操作系统内核的GSM/PHS双模智能手机)对嵌入式系统Windows CE5.0的底层驱动(SD卡)的架构进行了分析和研究,以MARVELL公司提供的基于INTEL Zylonite硬件平台的BSP为基础&…

pthread-win32在VC2005下的使用

pthread-win32是一个在Win32环境下的Unix POSIX线程库的移植. 有了它, 可以比较方便的移植Unix/Linux多线程程序到Windows下. 在VC2005下使用也很简单: 下载, 地址是 http://sourceware.org/pthreads-win32 里面include目录中是头文件, lib目录中是.lib和.dll文件. 在VC项目的属…

【转】apt命令

转自:apt命令详解 - 简书 apt命令可以说是Ubuntu系统下最为重要的命令,安装、更新、卸载软件,升级系统内核都离不开apt命令。 一、apt的简介 apt的全称是Advanced Packaging Tool是Linux系统下的一款安装包管理工具。 最初的时候&#xff…

maple 2018 窗口关闭提示乱码_如果解决SOLIDWORKS工程图转CAD字体出现乱码的问题_SolidWorks生信科技...

操作SOLIDWORKS工程图转CAD时,由于SOLIDWORKS使用的是Windows字体,而CAD使用的是线性字体,字体就容易出现乱码的苦恼。一般出现乱码是因为字体映射里面没有中文,所以会导致乱码。遇到这种情况,只需找到字体映射文件&am…

【转】apt 和 apt-get的区别

转自:https://www.sysgeek.cn/apt-vs-apt-get/ Ubuntu 16.04 发布时,一个引人注目的新特性便是 apt 命令的引入。其实早在 2014 年,apt 命令就已经发布了第一个稳定版,只是直到 2016 年的 Ubuntu 16.04 系统发布时才开始引人关注…