12、制品
12.1制品
软件制品是指由源码编译打包生成的二进制文件,不同的开发语言对应着不同格式的二进制文件,这些二进制通常可以直接运行在服务器上。
例如Java JAR,WAR,EAR格式;
Android AAR格式;
其他软件包格式,例如NuGet软件包,Ruby gems,NPM软件包;
Docker镜像和Helm charts;
普通ZIP或.tar.gz、dmg等压缩文件;
可执行文件格式,例如.exe 或.sh 文件;
Android APK、Apple IPA等各种安装程序格式。
12.2制品仓库
制品仓库用以储存和分发源代码编译后的构建产物,可以与源代码协同进行版本化控制;
与本地构建工具和云上的持续集成、持续部署无缝结合;
配合漏洞扫描、依赖分析等特性,是企业用于处理软件开发过程中产生的所有包类型的标准化工作间。
12.3镜像仓库
通过k8s 服务部署应用时,需要从镜像仓库拉取镜像,如:
① Docker,Docker镜像
② Helm,Helm charts
12.4依赖仓库
各种开发语言的依赖包管理仓库,通常会搭建nexus私服来通过代理拉取各个中央仓库的开源依赖包,也叫三方包;
由企业公共组件开发团队或合作公司提供的依赖包或SDK,也叫二方包,常见的有maven和npm包。
13、Maven仓库
13.1仓库分类
maven 仓库主要涉及到的是三类:远程中央仓库,公司组织的私服仓库,以及我们本地开发依赖的本地仓库。
中央仓库:maven人家管理的,开源的仓库,基本大家用到的jar包都是直接或者间接来自这里的。
私服仓库:就是有的东西不想开源自己拥有版权的东西,弄到自己的私服仓库中去,或者连接去中央仓库由于网络原因,就自己先把需要的都下载下来,很多镜像仓库其实就是这样的,不是人家官方组织维护的。
本地仓库:到这里就是你的地盘了,不管你这个包什么方式,什么仓库下载过来的,你本地项目的启动都是依赖你电脑的本地仓库,找不到才去中央仓库或者你setting设置的镜像或者公司的私服去下载,下载到你本地仓库,你不删除下回用的话就不用再去下载了。
13.2仓库坐标
用来描述仓库资源的位置,坐标主要组成:
groupId 定义Maven项目中的隶属组织名称(org.apache)
artifactIdId 定义项目名称(ZP_DEMO)
version 定义版本号
packaging 打包方式
13.3仓库配置
仓库的配置涉及到的就是setting文件,setting文件和pom文件是Maven工程,setting文件定义了本地库设在哪,你从哪个私服或者镜像网站拉去依赖jar包,定义拉取那个分组。
13.4Nexus仓库管理器(maven\docker\npm)
nexus的全称是Nexus Repository Manager,是Sonatype公司的一个产品。它是一个强大的仓库管理器,极大地简化了内部仓库的维护和外部仓库的访问。
我们主要用它来搭建公司内部的maven私服。但是它的功能不仅仅是创建maven私有仓库这么简单,还可以作为nuget、docker、npm、bower、pypi、rubygems、git lfs、yum、go、apt等的私有仓库,功能非常强大。
Nexus全称Sonatype Nexus,是一种特殊的远程仓库,它是架在局域网内的仓库服务。
Maven访问远程仓库下载jar包是需要外网支持的,在不提供外网或者网速很慢的情况下,项目构建就会非常困难,所以很有必要在局域网内搭建Nexus私服。
Nexus私服代理广域网上的远程仓库,供局域网内的Maven用户使用。
当Maven需要下载构件的时候,它从Nexus请求,如果Nexus上不存在该构件,则从外部的远程仓库上下载,缓存到nexus上之后再为Maven的下载提供服务。除此之外,我们还可以把一些无法从外部远程仓库下载到的构件上传到私服,实现共享的目的。
在公司内网,大大减轻了从中央仓库获取构件的带宽和不必要的磁盘浪费。
13.5Nexus私服作用
所谓的私服,就是在局域网中的一种特殊的远程仓库,它的作用是代理远程中央仓库和部署第三方构件。
有了私服之后,当Maven需要下载构件的时候,直接请求私服即可,私服上如果存在所需的构件,则直接从私服进行下载到本地仓库;反之,如果私服上不存在所需的构件,私服会请求外部的远程仓库(中央仓库),先将构件下载到私服,然后再提供给本地仓库进行下载。这样,第二个开发人员如果同样需要此构件,就可以直接从私服进行下载到本地仓库了。
13.6Nexus私服优点
节省外网带宽:大量对中央仓库的重复请求会消耗带宽,利用私服代理外部仓库,可以避免重复的公网下载降低带宽的压力。
加速maven的构建:maven通过内网从私服拉取所需构件(私服存在此构件的情况下),获取构件的速度大大加快,从而加快打包构件的速度。
部署第三方构件:开发人员自己封装的一些jar包(工具类),可以部署到私服,以便内部开发人员的maven项目使用。
提高稳定性:当公网网络不稳定的时候,如果使用远程仓库,maven的构建也会变得不稳定。如果在私服存在所需的构件,即使没有公网,maven的构件也会顺利进行。
降低中央仓库的负荷:使用私服,避免了从中央仓库的重复下载,可以减轻中央仓库的负荷。