背景
在软件项目开发中,一个项目常常依赖于大量的外部库,而这些外部库又在不断的进行版本更新,特别是在当前微服务开发越来越流行的情况下,一个服务依赖于多个服务,如何管理依赖库以及依赖版本,确保开发有序进行呢?
JFrog Artifactory
Artifactory是一款二进制存储管理工具,用来管理构建构建工具(如:gradle)等所依赖的二进制仓库,以方便管理第三方库和发布目标版本库,从而提高软件开发效率。它提供大量的插件以利于和不同工具之间的整合,内部使用权限管理更加安全,并支持高并发等等特性。另外我们搭建Artifactory私服的原因还有:
私有仓库的目的是作为团队内所使用的所有软件构件的内部私有构件仓库,将Maven构件(jar和pom)存储到一个专门的Maven仓库比将它们存储到版本控制系统中更有优势,这是因为:
·构件(jar)是二进制文件,不属于git版本控制系统,后者在处理文本文件方面比较好
·减少可能的版本冲突
·减少首次构建时需要的手动干涉
·中央仓库包含所有依赖的软件构件,引用单一的中央仓库比引用多个独立的本地库要好
·使用内部仓库做clean构建时会快些,因为Maven构件是从内部服务器而不是从因特网上获取。
生态环境
报价
最少功能且无任何售后支持的报价为2950美元每年。
JFrog Artifactory开源版:
http://www.jfrogchina.com/open-source/
JFrog Artifactory企业版(免费试用):
https://www.jfrog.com/artifactory/free-trial/?lang=zh-hans#High-Availability
Ubuntu环境搭建
1.下载开源版.rpm
https://jfrog.com/open-source/
2.安装
用alien转换Redhat Linux包.rmp为Ubuntu包.deb
$sudo apt-get install alien ##alien默认没有安装,所以首先要安装它
$sudo alien xxxx.rpm ##将rpm转换为deb,完成后会生成一个xxxx.deb
$sudo dpkg -i xxxx.deb ##这样xxxx软件就可以安装完成了
安装.deb
Sudo dpkg –i xxx.deb
3.运行
默认安装路径为/opt/jfrog/,Artifactory自带了Tomcat服务器。
可以先启动Tomcat(/opt/jfrog/artifactory/tomcat/bin/startup.sh),再启动artifactory(/opt/jfrog/artifactory/bin/artifactoryctlstart)。
或直接一起启动(/opt/jfrog/artifactory/bin/artifactory.shstart)
4.配置
默认在8081端口开启服务。初始用户为admin:password。第一次使用时会触发配置向导,要求修改密码创建仓库。Artifactory的仓库类型有:
·本地私有仓库:用于内部使用,上传的组件不会向外部进行同步。
·远程仓库:用于代理及缓存公共仓库,不能向此类型的仓库上传私有组件。
·虚拟仓库:不是真实在存储上的仓库,它用于组织本地仓库和远程仓库。
在此我们选择创建Gradle仓库。创建后的结构如下:
5.Gradle上传、引用文件
在此我们假设有两个Gradle工程(Diagnostic和Coverter),其中Diagnostic工程需要引用Converter工程,两个工程在并行开发。此时,最低效的做法是把Converter编译成.jar包并拷贝到Diagnostic工程下使用,当Coverter做了修改后,再重新拷贝。这样导致版本混乱且无法跟踪,当多个项目组一起工作时更加复杂。采用Artifactory的做法是每次Converter有稳健的版本时,我们将其.jar包推到Artifactory仓库,并打上版本号,Diagnostic根据自己的开发进度引用不同的Converter版本。
§上传
Build.gradle
applyplugin:'maven-publish'
applyplugin:'maven'
defMAVEN_LOCAL_PATH ='http://146.122.219.85:8081/artifactory/gradle-release'
defARTIFACT_ID ='converter'
defVERSION_NAME ='0.2.0'
defGROUP_ID ='com.siemens.mdsp'
uploadArchives {
repositories {
mavenDeployer {
repository(url:MAVEN_LOCAL_PATH ){
authentication(userName:"admin",password:"123456")
}
pom.project {
groupIdGROUP_ID
artifactIdARTIFACT_ID
versionVERSION_NAME
packaging'aar'
}
}
}
}
>gradle uploadArchives
Artifactory会生成metadata.xml和.pom文件,前者记录了当前包下的所有版本号,groupId,artifactId, lastUpdate等,后者记录了该包的所有依赖。
§引用
Diagnostic可以引用artifactory中的包。
Build.gradle
buildscript {
...
repositories {
jcenter()
maven{ url "http://xxx.xxx.xxx.xxx:8081/artifactory/gradle-release-local/"}
}
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:4+"
}
}
allprojects {
apply plugin: "com.jfrog.artifactory"
}
dependencies {
compile group: 'com.siemens.mdsp', name: 'converter', version: '0.1.0'
}
gradle --refresh-dependencies用于强行从服务器重取依赖。
产品对比
https://binary-repositories-comparison.github.io/
(部分图片来自网络)
关注非驴非码公众号了解更多信息:
领取专属 10元无门槛券
私享最新 技术干货