烂泥:jfrog artifactory的安装与使用

本文由ilanniweb微信公众号提供友情赞助,首发于烂泥行天下java

IT技术分享QQ群:571981257linux

趁国庆有时间,恰好最近也想把目前的CI/CD中的CD方案从新调整优化下。git

零、CI/CD部署流程优化

原来咱们业务部署的方式,不管是生产环境仍是预发环境都是直接从git仓库拉取代码,maven编译构建打包,而后经过ansible进行下一步的操做。web

这个过程基本上是没有问题的,可是考虑到预发环境和生产环境使用的是同一套代码,那么咱们彻底能够把在生产环境的CI和CD,直接修改成CD。也就说git仓库拉取代码,maven编译构建打包,这两个步骤彻底省略掉,直接使用预发环境的生成的构建产物进行部署。spring

除此以外,在作回滚发布时,经过直接部署上次的构建产物这个也是最快的,最节省时间的。docker

因此最近要对该部署方案进行优化,其中一个很关键的点,就是如何处理构建后产物的。数据库

目前业务代码使用的是springboot架构进行开发,因此各个环境的配置文件都会被打包最终的jar包中。api

若是使用的是docker或者k8s部署业务的话,很好处理,咱们只须要把最终产物达成镜像推送到docker仓库,而后生产部署时,直接从docker仓库拉取对应的docker镜像进行部署便可。安全

若是没有使用docker或者k8s部署业务的话,咱们可使用jfrog artifactory(如下文章简称jfrog)或者nexus3,这些二进制包管理工具,管理构建产物。在预发环境阶段把生成的jar包,存放到jfrog。而后生产环境部署时,jenkins直接从jfrog中拉取对应的jar包便可。springboot

有关 nexus3的使用,我会在下一篇文章中进行介绍。

以上整个流程,我会分阶段进行介绍,在此先介绍jfrog相关的知识点。

1、jfrog artifactory简介

jfrog artifactory是一款二进制存储管理工具,用来管理构建工具(如:maven、gradle)等所依赖的二进制仓库,以方便管理第三方库和发布目标版本库,从而提升软件开发效率。它提供大量的插件以利于和不一样工具之间的整合,内部使用权限管理更加安全,并支持高并发等等特性。

另外咱们搭建Artifactory私服的缘由还有:

私有仓库的目的是做为团队内所使用的全部软件构件的内部私有构件仓库,将Maven构件(jar和pom)存储到一个专门的Maven仓库比将它们存储到版本控制系统中更有优点,这是由于:

-->构件(jar)是二进制文件,不属于git版本控制系统,后者在处理文本文件方面比较好

-->减小可能的版本冲突

-->减小首次构建时须要的手动干涉

-->中央仓库包含全部依赖的软件构件,引用单一的中央仓库比引用多个独立的本地库要好

-->使用内部仓库作clean构建时会快些,由于Maven构件是从内部服务器而不是从因特网上获取

以上介绍来源与百度百科。

jfrog artifactory有企业版和开源版,两个版本。对于咱们来讲开源版本就够使用了,因此下面的文章所有是以开源版本为基准进行讲解。

2、安装基础环境

jfrog的运行须要jdk1.8以上版本支持,在此须要咱们首先配置jdk基础环境。

下载jdk版本,并安装,以下:

wget http://mirrors.linuxeye.com/jdk/jdk-8u221-linux-x64.tar.gz

tar -xf jdk-8u221-linux-x64.tar.gz -C /usr/local/

chown root:root -R /usr/local/jdk1.8.0_221

ln -s /usr/local/jdk1.8.0_221 /usr/local/jdk

ln -s /usr/local/jdk/bin/java  /usr/bin/java

clip_image001

把jdk加入系统环境变量中,以下:

cat >> /etc/profile << "EOF"

export JAVA_HOME=/usr/local/jdk

export PATH=$PATH:$JAVA_HOME/bin

EOF

clip_image002

使jdk环境变量生效,以下:

source /etc/profile

java -version

clip_image003

3、经过zip包方式安装jfrog

jfrog的安装有两种方式,第一种是经过zip包的方式进行安装,第二种是经过yum或者rpm方式进行安装。

在此咱们先介绍zip包方式的安装,能够经过以下网址查看zip包的相关信息:

https://bintray.com/jfrog/artifactory/jfrog-artifactory-oss-zip

clip_image004

3.1 下载jfrog的zip安装包

使用wget命令进行下载,固然也可使用其余命令,好比curl命令。

wget "https://bintray.com/jfrog/artifactory/download_file?file_path=jfrog-artifactory-oss-6.12.2.zip"

clip_image005

3.2 安装并启动jfrog服务

使用以下命令安装jfrog:

unzip -q jfrog-artifactory-oss-6.12.2.zip -d /usr/local/

ln -s /usr/local/artifactory-oss-6.12.2/ /usr/local/jfrog

ls -al /usr/local/jfrog/

clip_image006

启动jfrog,使用以下命令:

/usr/local/jfrog/bin/artifactoryctl start

ps -ef |grep jfrog

netstat -tunlp |grep 5256

clip_image008

经过上图,能够很明显的看出jfrog已经正常启动,而且也能够看出jfrog默认监听的是8081端口。

3.3 jfrog目录简介

jfrog的主要目录在此咱们作简单的介绍,以下:

jfrog相关脚本文件存放路径:/usr/local/jfrog/bin

jfrog日志存放路径:/usr/local/jfrog/logs/catalina

jfrog配置文件存放路径:/usr/local/jfrog/etc

jfrog备份数据存放路径:/usr/local/jfrog/backup

jfrog数据库存储路径:/usr/local/jfrog/data/derby

clip_image010

其中/usr/local/jfrog/bin/目录下的artifactoryctl是控制jfrog启动、关闭的脚本

/usr/local/jfrog/bin/artifactoryctl start 表示开启jfrog服务

/usr/local/jfrog/bin/artifactoryctl stop 表示关闭jfrog服务

/usr/local/jfrog/bin/installService.sh 表示把jfrog加入到系统服务,并开机启动

/usr/local/jfrog/bin/uninstallService.sh 表示把jfrog服务从系统服务中删除

若是没有特殊配置的话,jfrog使用的是derby做为其存储数据的数据库的。若是要使用其余类型的数据库做为jfrog数据存储的话,咱们能够修改/usr/local/jfrog/etc/db.properties文件中的配置便可。

除上述外/usr/local/jfrog/data/filestore/目录存放的都是上传的构建产物文件,该文件不是以明文的形式存在,而是jfrog服务本身进行了相关处理。

可是该文件的md5值是保持不变的,也就说你上传的jar是以另一种形式存在的。若是有须要,你能够经过重命名该文件就能够获得你的jar包。

下面的截图是一个示例,针对/usr/local/jfrog/data/filestore/目录实例,以下:

clip_image012

PS:强烈建议直接使用zip包方式安装jfrog。

4、经过yum和rpm包方式安装jfrog

在介绍完经过zip包方式安装jfrog完毕后,咱们再来介绍下经过yum和rpm包方式安装jfrog。

4.1 经过yum方式安装

经过yum方式安装jfrog,比较简单。须要下载jfrog的yum仓库源,而后进行安装便可,以下:

wget -O /etc/yum.repos.d/frog-artifactory.repo https://bintray.com/jfrog/artifactory-rpms/rpm

cat /etc/yum.repos.d/frog-artifactory.repo

clip_image014

开始安装jfrog,使用以下命令:

yum -y install jfrog-artifactory-oss

clip_image016

4.2 经过rpm包方式安装

咱们能够经过以下网址查看rpm包的相关信息:

https://bintray.com/jfrog/artifactory-rpms/jfrog-artifactory-oss-rpm

clip_image018

除上述地址以外,咱们还能够经过如下地址查看相关信息:

https://bintray.com/jfrog/product/JFrog-Artifactory-Pro/view

https://www.jfrogchina.com/open-source/#artifactory2

https://jfrog.com/open-source/

https://jfrog.bintray.com/artifactory-rpms/

下载对应的rpm包,使用以下命令:

wget "https://bintray.com/jfrog/artifactory-rpms/download_file?file_path=jfrog-artifactory-oss-6.12.2.rpm" -O jfrog-artifactory-oss.rpm

clip_image020

开始安装jfrog,使用以下命令:

yum -y install jfrog-artifactory-oss.rpm

clip_image022

clip_image024

5、查看yum和rpm包相关信息

使用以下命令查看jfrog的yum和rpm包安装信息,以下:

rpm -qa |grep jfrog

rpm -ql jfrog-artifactory-oss

clip_image026

clip_image028

经过上图,咱们能够很明显的看出jfrog有几个主要的目录:

/etc/opt/jfrog/artifactory

/opt/jfrog/artifactory

/var/opt/jfrog

有关这个几个目录的做用,能够参考3.3章节的介绍,在此就不作进一步的介绍。

启动jfrog服务,使用以下命令:

systemctl start artifactory.service

systemctl status artifactory.service

clip_image030

6、访问jfrog

Jfrog安装完毕,并启动服务后,咱们就能够经过http://ip:port访问了。

jfrog默认的端口是8081,默认的用户名和密码是:admin/password。

clip_image032

clip_image034

经过上图,咱们能够很明显的看出jfrog已经能够正常对外提供服务。

7、建立新仓库

jfrog服务启动完毕,咱们登录到web服务台后,就能够建立相关的仓库了。

目前开源版本的jfrog只支持Gradle、ivy、maven、SBT、Generic等5种仓库类型,若是你想要支持其余类型的仓库的话,可使用jfrog的企业版。以下:

clip_image036

在上传文件以前,咱们先来建立一个仓库,仓库类型咱们选择的是Generic,普通类型的仓库,仓库名称为testilanni。

具体建立步骤以下截图:

clip_image038

clip_image040

clip_image042

clip_image044

clip_image046

经过上图,咱们能够很明显的看出testlanni,这个Generic类型的仓库,已经建立完毕。

8、上传文件到jfrog

jfrog对应的仓库建立完毕后,咱们就能够上传文件到jfrog中。

咱们能够经过两种方式上传文件到jfrog中,一种是经过web页面,一种是经过api。下面一一进行介绍。

PS:须要注意下新上传的文件,命名和jfrog仓库中,在同一个仓库同一个子目录下时,若是已经存在一样命名的文件,那么新上传的文件会覆盖已经存在的文件。

8.1 经过web页面上传

咱们如今要把本地的user_web_upload.jar文件上传到testilanni仓库的user目录下,而且该文件的大小超过100M。

在经过web页面上传文件以前,咱们还要修改jfrog的默认web页面上传文件大小的限制,由于jfrog默认经过web方式上传文件的大小限制是100M。以下图:

clip_image048

clip_image050

咱们只须要把上图中的“File Upload Max Size”修改成指定的大小便可。在此咱们修改成0,表示不限制大小。以下:

clip_image052

上传文件大小限制完毕后,咱们就能够上传文件了,操做步骤以下:

clip_image054

clip_image056

clip_image058

clip_image060

clip_image062

上图中,我能须要注意“Target Path”选项,若是咱们不加子目录的话,能够不进行设置。若是是在子目录下的话,这个就须要添加了。

clip_image064

上述是图片是web端上传成功后的显示信息。

下面咱们来看下,新上传的文件在jfrog页面中显示的信息,以下:

clip_image066

上述图片中咱们能够看到文件名、大小、建立时间、仓库路径、MD5值,以及SHA-1值,其中SHA-1值为a0b97612c0a984aa365b6451778633f01a66bb18,MD5值为b18217e8b51113884bcdab865f970b72。

SHA-1值为上传文件在jfrog中实际的物理文件名。以下图:

clip_image068

8.2 经过api方式上传

经过web方式上传文件介绍完毕后,咱们再来介绍经过api方式上传文件。

经过api方式上传文件比较简单,咱们可使用curl命令发送PUT请求便可。命令以下:

curl -X PUT -u admin:password -T user_api_upload.jar "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"

clip_image070

注意上述图中,上传文件显示的md5值,和文件的md5值是同样。

如今咱们再登陆到web界面查看刚刚经过api上传的文件,以下截图:

clip_image072

经过上图,咱们能够很明显的看出,全部相关的信息和经过api成功上传后显示的都是同样的。

PS:须要注意下,经过API方式上传的文件,若是该仓库中没有对应的子目录,那么jfrog会自动建立该子目录,而后再上传文件。

9、下载文件

文件成功上传到jfrog中后,咱们就能够经过相关的工具或者命令下载文件。下面咱们就介绍经过curl和wget命令下载刚刚上传的文件。

在下载文件以前,咱们能够在web页面查看所要下载的文件的url,以下:

clip_image074

9.1 使用curl命令下载

jfrog官方默认是使用curl命令进行下载文件。以下:

curl -uadmin:password -O "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"

clip_image076

查看下载文件的md5值,使用以下命令:

md5sum user_api_upload.jar

clip_image078

把上述md5值与第8.1章节中jfrog web页面上,该文件显示的md5值对比能够很明显的发现,上传后的文件和下载后的文件是同样的,由于文件的md5值是同样的。

固然咱们也能够对下载的文件进行重命名,以下:

curl -uadmin:password -o user.jar "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"

clip_image080

9.2 使用wget命令下载

wget命令下载文件和curl命令,差很少,下面我就直接使用该命令下载便可。

下载到当前目录,使用以下命令:

wget --user=admin --password=password "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar"

clip_image082

下载到当前目录,并对对文件进行重命名:

wget --user=admin --password=password "http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar" -O ./user.jar

clip_image084

10、openLDAP配置

为了对jfrog的操做权限进行控制,在此咱们使用openldap接入用户的统一管理。具体配置以下截图:

clip_image086

clip_image088

LDAP URL中要填写ldap的服务器地址以及base dn,以下:

ldap://ldap.ilanni.com:389/dc=ilanni,dc=com

Search Filter和Search Base要填写(uid={0})和ou=People。

clip_image090

Manager DN和Manager Password要填写ldap管理员的帐号和密码,以下示例:

cn=root,dc=ilanni,dc=com和password

以上openldap配置完毕后,咱们来测试下刚刚的配置是否生效。以下:

clip_image092

经过上图能够很明显的看出,openldap与jfrog的集成是没有问题的,是成功的。

可是除了以上配置以外,咱们还须要激活该配置,以下:

clip_image094

PS:在这里须要说明一点,开源版本的jfrog不支持ldap的用户组,这个很坑。

11、用户受权

ldap与jfrog的集成配置完毕后,咱们必须先使用ldap中的用户登陆到jfrog web页面,而后再退出这个用户。

这样管理员才能在jfrog的web页面看到这个用户,这个操做和gitlab ce版本很像,都是须要先登陆到系统,而后系统中才能看到该用户。

在此咱们以ilanni这个用户为例,要求把ilanni用户设置为管理员,须要进行以下的操做。

ilanni用户登陆到jfrog就不作演示,咱们直接进入权限配置模式。相关截图以下:

clip_image096

clip_image098

clip_image100

通过以上设置ilanni用户就已是jfrog的管理员,如今咱们使用ilanni用户登陆的页面,以下:

clip_image102

12、设置匿名访问以及下载权限

默认状况下jfrog是不容许匿名下载以及访问的,考虑到实际的状况,咱们如今须要jfrog能够匿名访问。

相关配置据图以下:

clip_image104

clip_image106

使用以下命令测试匿名下载功能:

wget "http://192.180.0.38:8081/artifactory/testilanni/user/user_web_upload.jar"

clip_image108

经过上图能够很明显的看出,匿名用户具备下载权限。

咱们再来看匿名浏览权限,以下截图:

clip_image110

经过上图咱们能够很明显的看出,如今匿名用户也能够浏览jfrog的相关资源。

十3、经过api获取文件版本

在实际使用过程当中,咱们会获取指定仓库的全部已有的文件版本,咱们能够经过api的方式来获取。

由于要使用到jq工具,因此咱们首先要安装jq工具,以下:

yum -y install jq

clip_image112

下面使用curl和jq命令,获取testilanni仓库下user目录全部的jar包名称,命令以下:

curl -s http://192.180.0.38:8081/artifactory/api/storage/testilanni/user | jq -r '.children[] |select(.folder==false) |.uri' |cut -d '/' -f 2

clip_image114

获得全部jar包名称,咱们就能够后续的操做,好比与jenkins进行集成等。

到此有关jfrog的安装与使用就已经所有结束。