Jenkins和JFrog Artifactory可以通过Jenkins插件的方式来进行集成。这个插件可以通过Jenkins插件商店进行下载和安装。你可以通过依次选择Manage Jenkins (管理Jenkins) > Manage Plugins (管理插件) > Installed (已安装) 来查看该插件。列表中的Artifactory Plugin (Artifactory插件)就是我们需要用到的插件。
我们对本教程所提及的所有功能模块都已经进行了预配置,以便提供一个所有补充/必需产品的所有功能都能正常运行的演示环境来帮助大家快速上手JFrog Artifactory和JFrog Xray。
本教程将CI/CD流水线拆分成了Jenkins里面的三条流水线。我们将会创建一个要被发布到Artifactory的web应用程序。然后我们将会使用Docker镜像结合Ubuntu,Java和Tomcat来创建一个同样会被发布到Artifactory的web服务器模板。在此之后,我们就会从Artifactory下载该web应用程序和web服务器模板,用来创建一个生产环境的Docker镜像,用Xray对其进行扫描,并将该镜像promote(升级)到Artifactory里面的一个生产环境仓库。
1 | 创建应用程序war包
|
2 | 创建Docker镜像模板
|
3 | 创建生产环境Docker镜像
|
注意
由于每一步的操作都是建立在前一步已经顺利完成的基础上的,所以这些步骤需要按顺序执行。但是你可以在每一步完成后暂停操作,然后在稍后的任意时间里继续执行后续的步骤。
准备工作
在开始动手操作之前,你需要先定义好Artifactory和Jenkins的URL映射。这将使得你可以通过URL的名称(jfrog.local)而非IP地址(如下图:Environment Log所示)来访问和指定某个环境。
Environment Log
此外,Artifactory,Xray和其他系统里面的URL都会显示为jfrog.local。
为了实现这个效果,你需要将Environment Log里面提供的IP地址映射为jfrog.local。
在Mac/Linux中的配置方法:
使用你喜欢的编辑器来编辑以下文件(你需要拥有管理员权限):
/etc/hosts
添加以下内容:
<Environment Log中提供的IP地址> jfrog.local
在Windows中的配置方法:
使用你喜欢的编辑器来编辑以下文件(你需要拥有管理员权限):
c:\Windows\system 32\drivers\etc\hosts
添加以下内容:
<Environment Log中提供的IP地址> jfrog.local
完成以上步骤以后,你就可以通过主机名和端口号的方式来访问Artifactory,Xray和Jenkins的实例了。
Artifactory:http://jfrog.local
Xray:http://jfrog.local:8000/
Jenkins:http://jfrog.local:8080/
现在就让我们正式开始吧!
查看Jenkins流水线脚本
在本教程中我们会使用一个样例web程序,我们会用到该程序的源代码和相关的第三方依赖。所有的这些都是需要我们进行管理和打包的。
Jenkins中包含有5个预配置的job,本教程将会专注于讲解前面三个。
1
“Step1–create-application-war-file”
将该应用程序打包成一个名为app.war的文件
2
“Step2–create-docker-image-template”
创建一个Docker镜像作为基础镜像,该镜像将会被用来打包app product
3
“Step3–create-docker-image-product”
创建一个包含有app.war文件的Docker镜像
可选的Job
4
“Maven-snapshot”
学习如何在使用Maven来创建一个SNAPSHOT build
5
“Maven-release-pipeline”
在测试完以后,将创建的SNAPSHOT artifacts(二进制文件)升级到Release仓库
注意:在整个CI/CD流水线中,所有的artifact(二进制文件)都会被发布到Artifactory。
在Artifactory中,我们可以清楚的查看每个二进制文件分布属于哪一次构建的产物。这一点是非常重要的!举个例子,借助Artifactory的这一功能特性,你可以很清楚的知道哪些二进制文件不能被删除,因为你可以很清楚的看到它在哪一次构建中会被用到。通过构建产生的二进制文件还有很多其他的元数据。在本教程的后半部分,我们可以在构建产生的二进制文件的树形视图里看到这些元数据。
登录Jenkins
首先,我们需要先登录Jenkins。