ARTIFACTORY: Maven构建,并使用Gitlab将其与Docker构建进行容器化,并与ARTIFACTORY集成,并使用JFrog Xray进行扫描,作为JFrog项目的一部分
这篇KB文章的目的是启动一个maven构建,并使用GitLab作为CI/CD工具将其与docker构建进行容器化,并通过一个简单的用例将其与Artifactory集成。我们使用了JFrog平台的SaaS版本。然而,这个用例也适用于自托管的JFrog平台。
简介
GitLab可以作为一个CI/CD工具以及它的许多其他特性一起使用。为了将GitLab与JFrog Artifactory集成在一起,目前还没有现成的插件。但是,我们可以使用自己的CLI工具JFrog CLI集成它。我们可以使用JFrog CLI构建多种包类型。更多关于JFrog CLI的详细信息可以在这里找到链接.
在这篇KB文章中,我们将讨论maven构建,然后使用docker文件对其进行容器化,然后进行docker构建,然后将其推送到Artifactory。构建有以下步骤-
- 创建一个GitLab项目,并将所有必需的文件上传到GitLab存储库。
- 从Docker Hub提取基本图像。
- 使用我们提取的映像构建一个docker映像。步骤# 2和# 3将作为Dockerfile的一部分完成。
- 作为使用docker文件构建docker的一部分,它将执行“maven clean install”,这将构建docker包,然后将执行“maven clean deploy”,这将将maven包推到Artifactory,然后创建一个docker映像以及由“maven clean install”命令创建的jar文件。
- 在推送到Artifactory之前对图像进行扫描。您可以在这个页面上找到更多关于按需扫描的详细信息//m.si-fil.com/confluence/display/JFROG/Xray+On-Demand+Binary+Scan.请注意,它将引用监视和策略,策略有一个规则,如果图像包含任何漏洞,就会失败构建,因为在策略规则中选中了“失败构建”选项,如4中所述。B节“JFrog平台设置”。
- 将图像推送到Artifactory并发布构建信息。
- 使用JFrog x射线扫描构建。
- 扫描作为推送到Artifactory的maven构建的一部分创建的jar。
JFrog平台设置:
我们在JFrog平台上有以下配置。请注意,我们将推动构建和扫描它作为一个项目的一部分。有关该项目的详情,请参阅此文件-//m.si-fil.com/confluence/display/JFROG/Projects.
1.我们首先创建了一个项目,它看起来如下-
2.我们已经创建了一个虚拟的、远程的和本地的docker存储库,我们已经将本地和远程存储库绑定到虚拟存储库,我们将使用虚拟存储库作为端点
3.我们已经为发布创建了一个虚拟存储库和一个本地存储库,为快照创建了一个虚拟存储库和一个本地存储库,并将它们放在虚拟存储库中,如下所示-
4.x光配置必须完成如下-
a .在运行管道之前创建一个监视和策略。否则,x射线扫描将无法成功。请按照以下链接创建手表和策略-
使用此链接创建策略和规则//m.si-fil.com/confluence/display/JFROG/Creating+Xray+Policies+and+Rules
使用此链接创建手表并添加存储库、构建、策略和规则//m.si-fil.com/confluence/display/JFROG/Configuring+Xray+Watches
B.确保在策略创建时在策略规则中启用以下选项-
C.需要在JFrog平台的索引资源中包含构建。2022世界杯阿根廷预选赛赛程但是,当第一次使用x射线扫描步骤创建构建时,它将跳过x射线扫描步骤,因为构建未包含在索引资源中。2022世界杯阿根廷预选赛赛程这就是为什么建议使用include或Exclude模式来包含构建。对于本例,Include模式是“*/**”。这意味着平台将把所有推送到Artifactory的构建添加到索引资源中2022世界杯阿根廷预选赛赛程
有关索引资源的更多详细信息,也建议阅读这篇KB文章-2022世界杯阿根廷预选赛赛程//m.si-fil.com/knowledge-base/xray-how-to-index-and-scan-all-builds-in-xray-in-the-unified-platform/
D.确保将maven存储库添加到索引资源中,如下所示2022世界杯阿根廷预选赛赛程
码头工人文件:
对于docker构建,我们需要创建一个docker文件。docker文件内容如下-maven:最新
运行mkdir -p /usr/local/maven && mkdir -p /root/。M2 && mkdir /root/.m2/repository
#复制maven设置,包含存储库配置
复制settings.xml /root/.m2
WORKDIR /usr/local/maven
ADD ./maven-example。
运行mvn clean install
运行mvn clean deploy
docker文件实际上是执行以下项目-
- 拉一张专家图片
- 创建目录“/usr/local/maven”和“/root/”。M2 "和" /root/.m2/repository "
- 将“settings.xml”拷贝到“/root/. xml”目录下。m2”目录。
- 将“/usr/local/maven”声明为工作目录。
- 将整个“maven-example”文件夹及其内容从GitLab存储库复制到已定义的工作目录。
- 执行命令" mvn clean install "
- 执行命令" mvn clean deploy "
GitLab设置:
我们需要有下面的GitLab设置-
1.首先在GitLab中创建一个项目。你可以使用下面的链接找到如何创建项目的详细信息-
一个。GitLab官方链接- - - - - -https://docs.gitlab.com/ee/user/project/working_with_projects.html
B。Youtube链接- - - - - -https://www.youtube.com/watch?v=DGuMvGYZ7lY
2.按照步骤# 1中的链接,将所有必需的文件上传到GitLab存储库。它看起来是这样的
从上面的截图中可以看到,创建了一个“maven-example”文件夹。此文件夹包含maven源代码和用于maven构建的“pom.xml”。这是一个样本专家项目,我已经从这一页-https://github.com/jfrog/project-examples/tree/master/maven-examples/maven-example.内容如下所示-
3.确保“pom.xml”文件具有如下所述的存储库配置的分发管理。示例“pom.xml”如下所示<?xml version="1.0" encoding="UTF-8"?>
<项目xmlns = " http://maven.apache.org/POM/4.0.0 "”
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">;
< modelVersion > 4.0.0 < / modelVersion >
< groupId > org.jfrog.test < / groupId >
< artifactId >多< / artifactId >
<版本> 3.7快照> < /版本
<包装> pom > < /包装
<模块>
<模块> multi1 > < /模块
<模块> multi2 > < /模块
<模块> multi3 > < /模块
> < /模块
<属性>
utf - 8 < project.build.sourceEncoding > < / project.build.sourceEncoding >
1.8 < maven.compiler.source > < / maven.compiler.source >
1.8 < maven.compiler.target > < / maven.compiler.target >
< / >属性
< >的依赖关系
<依赖>
< groupId > junit < / groupId >
< artifactId > junit < / artifactId >
<版本> 3.8.1 > < /版本
< >范围测试> < /范围
< / >的依赖
< / >的依赖关系
构建> <
< pluginManagement >
<插件>
<插件>
< groupId > org.apache.maven.plugins < / groupId >
< artifactId > maven-jar-plugin < / artifactId >
<版本> 3.2.2版本> < /
< /插件>
<插件>
< groupId > org.apache.maven.plugins < / groupId >
< artifactId > maven的war插件< / artifactId >
<版本> 3.3.2 > < /版本
< /插件>
<插件>
< groupId > org.apache.maven.plugins < / groupId >
< artifactId > maven-source-plugin < / artifactId >
<版本> 3.2.1版本> < /
< /插件>
< /插件>
< / pluginManagement >
<插件>
<插件>
< groupId > org.apache.maven.plugins < / groupId >
< artifactId > maven-jar-plugin < / artifactId >
< >配置
<文件>
假< / addMavenDescriptor < addMavenDescriptor > >
< / >存档
< /配置>
< /插件>
<插件>
< groupId > org.apache.maven.plugins < / groupId >
< artifactId > maven的war插件< / artifactId >
< >配置
<文件>
假< / addMavenDescriptor < addMavenDescriptor > >
< / >存档
< /配置>
< /插件>
< /插件>
构建> < /
< distributionManagement >
<库>
< id >版本id > < /
< / > < url https://test.jfrog.io/artifactory/dct-libs-release url >;
> < /库
< snapshotRepository >
<标识> < / id >快照
< / > < url https://test.jfrog.io/artifactory/dct-libs-snapshot url >;
< / snapshotRepository >
< / distributionManagement >
< /项目>
4.你需要的另一个重要文件是settings.xml文件,该文件必须从给我介绍按钮从Artifactory UI。有关如何生成“settings.xml文件-//m.si-fil.com/confluence/display/JFROG/Maven+Repository#MavenRepository-AutomaticallyGeneratingSettings.示例“settings.xml”看起来像这样-<?xml version="1.0" encoding="UTF-8"?>
<设置xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 http://maven.apache.org/xsd/settings-1.2.0.xsd"" xmlns="http://maven.apache.org/SETTINGS/1.2.0""
xmlns: xsi = " http://www.w3.org/2001/XMLSchema-instance " >;
<服务器>
< server >
<用户名> <用户名> < /用户名>
<密码> <密码> < /密码>
< id >中部> < / id
> < /服务器
< server >
<用户名> <用户名> < /用户名>
<密码> <密码> < /密码>
<标识> < / id >快照
> < /服务器
> < /服务器
<文件>
<文件>
<库>
<库>
<快照>
<启用>假启用< / >
< / >快照
< id >中部> < / id
<名称> dct-libs-release < /名称>
< / > < url https://customer.jfrog.io/artifactory/dct-libs-release url >;
> < /库
<库>
< / >快照
<标识> < / id >快照
<名称> dct-libs-snapshot < /名称>
< / > < url https://customer.jfrog.io/artifactory/dct-libs-snapshot url >;
> < /库
< /存储库>
< pluginRepositories >
< pluginRepository >
<快照>
<启用>假启用< / >
< / >快照
< id >中部> < / id
<名称> dct-libs-release < /名称>
< / > < url https://customer.jfrog.io/artifactory/dct-libs-release url >;
< / pluginRepository >
< pluginRepository >
< / >快照
<标识> < / id >快照
<名称> dct-libs-snapshot < /名称>
< / > < url https://customer.jfrog.io/artifactory/dct-libs-snapshot url >;
< / pluginRepository >
< / pluginRepositories >
<标识> artifactory id > < /
< / profile >
> < /概要文件
< activeProfiles >
< activeProfile > artifactory < / activeProfile >
< / activeProfiles >
> < /设置
5.点击设置按钮,确保你已经启用了CI/CD选项,如下面的截图所示,否则你将看不到CI/CD选项,你必须检查管道运行状态-
6.现在在设置中创建如下所示的变量。我们将在管道脚本中使用这些变量-
定义的变量如下-
ART_DOCKER_PASS: <访问Artifactory docker存储库的密码。一般来说,它和你登录到JFrog UI并查看docker仓库>是一样的
ART_DOCKER_REG:test.jfrog.io
ART_DOCKER_USER: <访问Artifactory docker存储库的用户名。一般来说,它和你登录到JFrog UI并查看docker仓库>是一样的
ART_PLAT_PASS: <登录JFrog UI>的密码
ART_PLAT_URL:https://test.jfrog.io
ART_PLAT_USER: <登录JFrog UI>的用户名
ARTIFACTORY_PROJECT_KEY: <在下面的步骤# 1中所示的项目中定义的项目键JFrog平台设置>
7.现在添加一个名为".gitlab-ci.yml在GitLab项目。关于如何添加文件的详细信息在本文档中提到了-https://docs.gitlab.com/ee/ci/quick_start/
8.现在在刚刚添加的yaml文件中添加以下内容-docker-build:
使用官方docker映像。
图片:码头工人:最新
阶段:构建
服务:
码头工人:dind
before_script:
- apk add -update curl && rm -rf /var/cache/apk/*
# docker登录Artifactory
- docker login -u "$ART_DOCKER_USER" -p "$ART_DOCKER_PASS" $ART_DOCKER_REG .
#安装JFrog CLI
- curl - fl https://install-cli.jfrog.io | sh
- chmod +x /usr/local/bin/jf . sh
#使用JFrog CLI配置Artifactory实例
——pwd
—CD /usr/local/bin/
- ./jf——version . txt
- ./jf c add artifactory-server——url=$ART_PLAT_URL——user=$ART_PLAT_USER——password=$ART_PLAT_PASS
脚本:
# docker构建
-docker build -pull -t "$ART_DOCKER_REG/dct-docker/test:$CI_JOB_ID" /builds/ swarnendenkayal /maven-docker-test .
—CD /usr/local/bin/
#按需扫描
- ./jf docker scan "$ART_DOCKER_REG/dct-docker/test:$CI_JOB_ID"——project=$ARTIFACTORY_PROJECT_KEY .
# Docker推送
- ./jf rt docker-push "$ART_DOCKER_REG/dct-docker/test:$CI_JOB_ID" dct-docker——build-name=maven-docker-jfrog——build-number=$CI_JOB_ID——project=$ARTIFACTORY_PROJECT_KEY
#收集环境变量
- ./jf rt bce maven-docker-jfrog $CI_JOB_ID——project=$ARTIFACTORY_PROJECT_KEY
#传递构建信息给Artifactory
- ./jf rt bp maven-docker-jfrog $CI_JOB_ID——project=$ARTIFACTORY_PROJECT_KEY
#扫描docker构建
- ./jf bs maven-docker-jfrog $CI_JOB_ID——project=$ARTIFACTORY_PROJECT_KEY
#在Dockerfile存在的分支中运行此作业
规则:
—if: $CI_COMMIT_BRANCH
存在:
——Dockerfile
请注意地址/构建/ swarnendukayal / maven-docker-test,配置为定义GitLab存储库路径,Dockerfile在进行docker构建时将从该路径引用文件。该位置将在项目和概要文件之间更改项目。
例如:如果项目URL(仅为示例)如下-https://gitlab.com/abc/test-jfrog/-/blob/master/.gitlab-ci.yml,则位置为“/构建/ abc / test-jfrog”。请根据您的项目和存储库位置进行更改。
保存此文件后,它将立即触发构建,您可以找到如下所示的构建状态-
构建显示为失败,因为Xray策略被定义为在捕获任何漏洞时构建失败。
构建在JFrog平台上看起来如何:
1.构建将出现在构建部分,如下所示-
2.一旦你点击构建,它将显示你如下所示的构建号-
正如你所看到的,当构建被扫描和违规被给出时,x射线状态也会显示出来。如果您想查看特定于版本号的x射线状态,请单击版本号,然后转到“x射线数据”,如下所示
扫描这是做的图像被推到Artifactory,可以看到这里-
我们已经推送到Artifactory的maven包被部署到存储库中,这些包也被扫描了,因为我们可以在Xray选项卡中看到如下所示的违规
请注意,我们在这里所做的步骤,除了Dockerfile中的docker构建步骤和maven构建步骤之外,基本上都是这个博客中提到的步骤-//m.si-fil.com/blog/manage-your-docker-builds-with-jfrog-cli-in-5-easy-steps/.为了更清楚地了解JFrog CLI如何与docker一起工作,请仔细阅读。
