本文由ilanniweb微信公众号提供友情赞助,首发于烂泥行天下
IT技术分享QQ群:571981257
趁国庆有时间,刚好最近也想把目前的CI/CD中的CD方案重新调整优化下。
零、CI/CD部署流程优化
原来我们业务部署的方式,无论是生产环境还是预发环境都是直接从git仓库拉取代码,maven编译构建打包,然后通过ansible进行下一步的操作。
这个过程基本上是没有问题的,但是考虑到预发环境和生产环境使用的是同一套代码,那么我们完全可以把在生产环境的CI和CD,直接修改为CD。也就说git仓库拉取代码,maven编译构建打包,这两个步骤完全省略掉,直接使用预发环境的生成的构建产物进行部署。
除此之外,在做回滚发布时,通过直接部署上次的构建产物这个也是最快的,最节省时间的。
所以最近要对该部署方案进行优化,其中一个很关键的点,就是如何处理构建后产物的。
目前业务代码使用的是springboot架构进行开发,所以各个环境的配置文件都会被打包最终的jar包中。
如果使用的是docker或者k8s部署业务的话,很好处理,我们只需要把最终产物达成镜像推送到docker仓库,然后生产部署时,直接从docker仓库拉取对应的docker镜像进行部署即可。
如果没有使用docker或者k8s部署业务的话,我们可以使用jfrog artifactory(以下文章简称jfrog)或者nexus3,这些二进制包管理工具,管理构建产物。在预发环境阶段把生成的jar包,存放到jfrog。然后生产环境部署时,jenkins直接从jfrog中拉取对应的jar包即可。
有关 nexus3的使用,我会在下一篇文章中进行介绍。
以上整个流程,我会分阶段进行介绍,在此先介绍jfrog相关的知识点。
一、jfrog artifactory简介
jfrog artifactory是一款二进制存储管理工具,用来管理构建工具(如:maven、gradle)等所依赖的二进制仓库,以方便管理第三方库和发布目标版本库,从而提高软件开发效率。它提供大量的插件以利于和不同工具之间的整合,内部使用权限管理更加安全,并支持高并发等等特性。
另外我们搭建Artifactory私服的原因还有:
私有仓库的目的是作为团队内所使用的所有软件构件的内部私有构件仓库,将Maven构件(jar和pom)存储到一个专门的Maven仓库比将它们存储到版本控制系统中更有优势,这是因为:
–>构件(jar)是二进制文件,不属于git版本控制系统,后者在处理文本文件方面比较好
–>减少可能的版本冲突
–>减少首次构建时需要的手动干涉
–>中央仓库包含所有依赖的软件构件,引用单一的中央仓库比引用多个独立的本地库要好
–>使用内部仓库做clean构建时会快些,因为Maven构件是从内部服务器而不是从因特网上获取
以上介绍来源与百度百科。
jfrog artifactory有企业版和开源版,两个版本。对于我们来说开源版本就够使用了,所以下面的文章全部是以开源版本为基准进行讲解。
二、安装基础环境
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
把jdk加入系统环境变量中,如下:
cat >> /etc/profile << “EOF”
export JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
EOF
使jdk环境变量生效,如下:
source /etc/profile
java -version
三、通过zip包方式安装jfrog
jfrog的安装有两种方式,第一种是通过zip包的方式进行安装,第二种是通过yum或者rpm方式进行安装。
在此我们先介绍zip包方式的安装,可以通过如下网址查看zip包的相关信息:
https://bintray.com/jfrog/artifactory/jfrog-artifactory-oss-zip
3.1 下载jfrog的zip安装包
使用wget命令进行下载,当然也可以使用其他命令,比如curl命令。
wget “https://bintray.com/jfrog/artifactory/download_file?file_path=jfrog-artifactory-oss-6.12.2.zip”
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/
启动jfrog,使用如下命令:
/usr/local/jfrog/bin/artifactoryctl start
ps -ef |grep jfrog
netstat -tunlp |grep 5256
通过上图,可以很明显的看出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
其中/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/目录实例,如下:
PS:强烈建议直接使用zip包方式安装jfrog。
四、通过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
开始安装jfrog,使用如下命令:
yum -y install jfrog-artifactory-oss
4.2 通过rpm包方式安装
我们可以通过如下网址查看rpm包的相关信息:
https://bintray.com/jfrog/artifactory-rpms/jfrog-artifactory-oss-rpm
除上述地址之外,我们还可以通过以下地址查看相关信息:
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
开始安装jfrog,使用如下命令:
yum -y install jfrog-artifactory-oss.rpm
五、查看yum和rpm包相关信息
使用如下命令查看jfrog的yum和rpm包安装信息,如下:
rpm -qa |grep jfrog
rpm -ql jfrog-artifactory-oss
通过上图,我们可以很明显的看出jfrog有几个主要的目录:
/etc/opt/jfrog/artifactory
/opt/jfrog/artifactory
/var/opt/jfrog
有关这个几个目录的作用,可以参考3.3章节的介绍,在此就不做进一步的介绍。
启动jfrog服务,使用如下命令:
systemctl start artifactory.service
systemctl status artifactory.service
六、访问jfrog
Jfrog安装完毕,并启动服务后,我们就可以通过http://ip:port访问了。
jfrog默认的端口是8081,默认的用户名和密码是:admin/password。
通过上图,我们可以很明显的看出jfrog已经可以正常对外提供服务。
七、创建新仓库
jfrog服务启动完毕,我们登陆到web服务台后,就可以创建相关的仓库了。
目前开源版本的jfrog只支持Gradle、ivy、maven、SBT、Generic等5种仓库类型,如果你想要支持其他类型的仓库的话,可以使用jfrog的企业版。如下:
在上传文件之前,我们先来创建一个仓库,仓库类型我们选择的是Generic,普通类型的仓库,仓库名称为testilanni。
具体创建步骤如下截图:
通过上图,我们可以很明显的看出testlanni,这个Generic类型的仓库,已经创建完毕。
八、上传文件到jfrog
jfrog对应的仓库创建完毕后,我们就可以上传文件到jfrog中。
我们可以通过两种方式上传文件到jfrog中,一种是通过web页面,一种是通过api。下面一一进行介绍。
PS:需要注意下新上传的文件,命名和jfrog仓库中,在同一个仓库同一个子目录下时,如果已经存在同样命名的文件,那么新上传的文件会覆盖已经存在的文件。
8.1 通过web页面上传
我们现在要把本地的user_web_upload.jar文件上传到testilanni仓库的user目录下,并且该文件的大小超过100M。
在通过web页面上传文件之前,我们还要修改jfrog的默认web页面上传文件大小的限制,因为jfrog默认通过web方式上传文件的大小限制是100M。如下图:
我们只需要把上图中的“File Upload Max Size”修改为指定的大小即可。在此我们修改为0,表示不限制大小。如下:
上传文件大小限制完毕后,我们就可以上传文件了,操作步骤如下:
上图中,我能需要注意“Target Path”选项,如果我们不加子目录的话,可以不进行设置。如果是在子目录下的话,这个就需要添加了。
上述是图片是web端上传成功后的显示信息。
下面我们来看下,新上传的文件在jfrog页面中显示的信息,如下:
上述图片中我们可以看到文件名、大小、创建时间、仓库路径、MD5值,以及SHA-1值,其中SHA-1值为a0b97612c0a984aa365b6451778633f01a66bb18,MD5值为b18217e8b51113884bcdab865f970b72。
SHA-1值为上传文件在jfrog中实际的物理文件名。如下图:
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”
注意上述图中,上传文件显示的md5值,和文件的md5值是一样。
现在我们再登录到web界面查看刚刚通过api上传的文件,如下截图:
通过上图,我们可以很明显的看出,所有相关的信息和通过api成功上传后显示的都是一样的。
PS:需要注意下,通过API方式上传的文件,如果该仓库中没有对应的子目录,那么jfrog会自动创建该子目录,然后再上传文件。
九、下载文件
文件成功上传到jfrog中后,我们就可以通过相关的工具或者命令下载文件。下面我们就介绍通过curl和wget命令下载刚刚上传的文件。
在下载文件之前,我们可以在web页面查看所要下载的文件的url,如下:
9.1 使用curl命令下载
jfrog官方默认是使用curl命令进行下载文件。如下:
curl -uadmin:password -O “http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar”
查看下载文件的md5值,使用如下命令:
md5sum user_api_upload.jar
把上述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”
9.2 使用wget命令下载
wget命令下载文件和curl命令,差不多,下面我就直接使用该命令下载即可。
下载到当前目录,使用如下命令:
wget –user=admin –password=password “http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar”
下载到当前目录,并对对文件进行重命名:
wget –user=admin –password=password “http://192.180.0.38:8081/artifactory/testilanni/user/user_api_upload.jar” -O ./user.jar
十、openLDAP配置
为了对jfrog的操作权限进行控制,在此我们使用openldap接入用户的统一管理。具体配置如下截图:
LDAP URL中要填写ldap的服务器地址以及base dn,如下:
ldap://ldap.ilanni.com:389/dc=ilanni,dc=com
Search Filter和Search Base要填写(uid={0})和ou=People。
Manager DN和Manager Password要填写ldap管理员的账号和密码,如下示例:
cn=root,dc=ilanni,dc=com和password
以上openldap配置完毕后,我们来测试下刚刚的配置是否生效。如下:
通过上图可以很明显的看出,openldap与jfrog的集成是没有问题的,是成功的。
但是除了以上配置之外,我们还需要激活该配置,如下:
PS:在这里需要说明一点,开源版本的jfrog不支持ldap的用户组,这个很坑。
十一、用户授权
ldap与jfrog的集成配置完毕后,我们必须先使用ldap中的用户登录到jfrog web页面,然后再退出这个用户。
这样管理员才能在jfrog的web页面看到这个用户,这个操作和gitlab ce版本很像,都是需要先登录到系统,然后系统中才能看到该用户。
在此我们以ilanni这个用户为例,要求把ilanni用户设置为管理员,需要进行如下的操作。
ilanni用户登录到jfrog就不做演示,我们直接进入权限配置模式。相关截图如下:
经过以上设置ilanni用户就已经是jfrog的管理员,现在我们使用ilanni用户登录的页面,如下:
十二、设置匿名访问以及下载权限
默认情况下jfrog是不允许匿名下载以及访问的,考虑到实际的情况,我们现在需要jfrog可以匿名访问。
相关配置据图如下:
使用如下命令测试匿名下载功能:
wget “http://192.180.0.38:8081/artifactory/testilanni/user/user_web_upload.jar”
通过上图可以很明显的看出,匿名用户具有下载权限。
我们再来看匿名浏览权限,如下截图:
通过上图我们可以很明显的看出,现在匿名用户也可以浏览jfrog的相关资源。
十三、通过api获取文件版本
在实际使用过程中,我们会获取指定仓库的所有已有的文件版本,我们可以通过api的方式来获取。
因为要使用到jq工具,所以我们首先要安装jq工具,如下:
yum -y install jq
下面使用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
得到所有jar包名称,我们就可以后续的操作,比如与jenkins进行集成等。
到此有关jfrog的安装与使用就已经全部结束。
未经允许不得转载:烂泥行天下 » 烂泥:jfrog artifactory的安装与使用