关注世界领先 DevOps 平台 JFrog
本文描述的教程内容读者可在 Try.jfrog.com 中免费注册账号亲自体验
本教程将会 分两篇讲解 如何创建一条包含有JFrog Artifactory,JFrog Xray和Jenkins的CI/CD流水线。
JFrog Artifactory是一个支持由任何语言和技术构建而成的软件包的制品仓库管理工具。此外,它还可以跟所有主流的CI/CD和DevOps工具进行集成来提供一个端到端的自动化解决方案来追踪二进制产品从开发到发布到生产环境的整个生命周期。
JFrog Xray提供通用制品分析功能,通过对二进制包的每一层进行递归扫描,使得他们的软件架构高度透明化,为用户提供前所未有的洞察能力,从而提高他们软件组件的能见度和性能 。
Jenkins是一款开源的,用Java开发的自动化服务器。通过实现持续集成以及帮助开发团队在技术层面实现持续交付的方式,Jenkins可以帮助我们在整个软件开发流程中实现非人工部分的自动化。
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所示)来访问和指定某个环境。
此外,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,本教程将会专注于讲解前面三个。
将该应用程序打包成一个名为app.war的文件
创建一个Docker镜像作为基础镜像,该镜像将会被用来打包app product
创建一个包含有app.war文件的Docker镜像
可选的Job
学习如何在使用Maven来创建一个SNAPSHOT build
在测试完以后,将创建的SNAPSHOT artifacts(二进制文件)升级到Release仓库
注意 :在整个CI/CD流水线中,所有的artifact(二进制文件)都会被发布到Artifactory。
在Artifactory中,我们可以清楚的查看每个二进制文件分布属于哪一次构建的产物。这一点是非常重要的!举个例子,借助Artifactory的这一功能特性,你可以很清楚的知道哪些二进制文件不能被删除,因为你可以很清楚的看到它在哪一次构建中会被用到。通过构建产生的二进制文件还有很多其他的元数据。在本教程的后半部分,我们可以在构建产生的二进制文件的树形视图里看到这些元数据。
登录Jenkins
首先,我们需要先登录Jenkins。
:soon: 打开浏览器,输入 http://jfrog.local:8080/ ,使用“admin”作为用户名,并结合Environment Log中提供的密码来进行登录。
除了Jenkins以外,Artifactory还可以跟Hudson,TeamCity,Bamboo或者是其他的CI服务器进行紧密的集成。
流水线的第一部分是使用一个包含有Gradle项目的Jenkins Job来构建一个web应用程序并生成一个war包,然后将该war包发布到Artifactory中,并使用Xray对其进行扫描。
注意 :在整个CI/CD流水线中,所有发布到Artifactory的二进制文件都会被JFrog Xray扫描
在我们开始构建之前,我们先看一下这条流水线的配置脚本。如下图所示,我们定义了4个stage,每个stage都会执行特定的任务。
:soon: 点击“ step1-create-application-war-file ”来查看提前配置好的流水线。
:soon: 点击“Configure/配置”来查看流水线的脚本。流水线脚本中的每个stage都会完成其名称中所表述的任务。仔细阅读脚本中的注释,从而更好的理解每个stage具体做了什么。
注意 :隐式的捕捉每次构建的构建信息并将其保存在Artifactory中可以帮助我们获得一个完全可重现的构建。由于我们的所有构建都是相对依赖的,这一特性使得他们可以被追溯。
def buildInfo = Artifactory.newBuildInfo()
buildInfo.env.cpature = true
流水线的第二部分是使用ubuntu-trusty作为基础镜像,并在其中添加JDK8和Tomcat,创建一个名为“docker-framework”的Docker镜像。然后改镜像会被发布到Artifactory中,并被Xray扫描。
在我们开始构建之前,让我们先看看它的配置脚本。
:soon: 回到Jenkins的首页,在那里我们可以看到所有预先配置好的流水线
:soon: 点击“Step2-create-docker-image-template”来查看这条预先配置好的流水线
:soon: 点击“Configure/配置”按钮来查看流水线的脚本。流水线脚本中的每个stage都会完成其名称中所表述的任务。仔细阅读脚本中的注释,从而更好的理解每个stage具体做了什么。
现在让我们来为我们刚刚创建的二级制文件一共用来表示功能测试状态的元数据吧。首先,我们创建一个名为“functional-test”的属性,然后把这个属性的值设置为“pass”或者是“fail”。
流水线的第三部分是创建一个Docker镜像,这个Docker镜像将会包含有我们在第一步中生成的war包和我在第二部中创建的docker-framework基础镜像。
:soon: 我们再次回到Jenkins的首页,在那里我们可以看到所有预先配置好的流水线
:soon: 点击“step3-create-docker-image-product”来查看预先这条配置好的流水线
:soon: 点击“Configure/配置”按钮来查看流水线的脚本。流水线脚本中的每个stage都会完成其名称中所表述的任务。仔细阅读脚本中的注释,从而更好的理解每个stage具体做了什么。
我们创建了一个Docker镜像,并将其依次升级到测试和预发布等阶段,在它通过所有的质量关卡之后(这样可以消除未经检验的镜像文件被使用的风险),我们在开发阶段创建的这个镜像就可以被终端用户下载或者是被部署到生产环境的服务器了。为了限制访问/保留政策,我们会将同一个docker镜像升级到Artifactory中的生产环境仓库。
注意 :由于Artifactory采用的是基于checksum的存储方式,因此我们进行升级操作的时候,我们其实只是更新了元数据
发布到Artifactory的二进制文件将会被JFrog Xray进行扫描,我们可以通过将failBuild设置为true的方式来告诉Xray和Jenkins:如果Xray扫描到了严重的问题,则自动将本次构建标记为失败。
在我们开始探索Artifactory仓库之前,让我们执行最后一个构建步骤来创建将会被用于生产环境的Docker镜像,并将它发布到Artifactory中去。
为了节省时间,我们不需要执行前面两个构建步骤。我们已经将他们的构建产物提前发布到Artifactory了。当然,如果你感兴趣的话,也可以试着执行一下,看看它们都具体做了什么操作。
:soon: 点击“Build with Parameters/使用参数进行构建”来执行一次新的构建
:soon: 点击“Build/构建”来开始构建。一个新的构建将会被添加到构建历史列表
:soon: 点击构建号码来查看作业信息以及“Artifactory Build Info/Artifactory构建信息”页面
点击“Console Output/控制台输出”来查看构建日志
来到页面最后可以看到所有被部署到Artifactory的artifacts(二进制产物)以及构建信息
注意 :我们可以通过点击日志中的链接,或者是点击结果页面的Artifactory logo,来跳转到Artifactory中的构建页面去查看当前这次构建的详细信息。
下载 JFrog Artifactory 企业版(免费试用): https://www.jfrogchina.com/artifactory/free-trial/
下载 JFrog Artifactory 开源版(代替 Nexus):
http://www.jfrogchina.com/open-source/
下载 JFrog JCR :
https://jfrog.com/container-registry/
想了解更多国内外 DevOps 实战案例,扫描下方二维码关注“ JFrog杰蛙DevOps ”公众号,在后台回复“ devops ”,即可免费获取DevOPs入门到精通实战视频及PPT学习资料。
长按二维码关注