ARTIFACTORY:如何使用Azure DevOps构建docker构建并将其推送到ARTIFACTORY
这篇知识库文章的目的是通过一个简单的用例来启动Azure DevOps构建过程。
介绍
Azure DevOps是一个CI/CD工具,通过它我们可以构建多种包类型。在这篇知识库文章中,我们将讨论docker构建。docker的构建有四个步骤
- 使用docker注册表获取docker镜像。在本例中,它是Artifactory。
- 使用我们提取的映像构建docker映像。
- 将映像推送到Artifactory并发布构建信息。
- 使用JFrog x射线扫描构建
步骤如下:
- 创建一个Dockerfile并将其上传到GitHub存储库。Docker示例文件如下所示
ARG BASEIMAGE
从BASEIMAGE美元
#从nginx
执行echo $BASEIMAGE命令
执行rm /etc/nginx/conf.d/*
运行echo "files are deleted"
添加helloworld.conf /etc/nginx/conf.d/
添加index.html /usr/share/nginx/html/
添加artic -error.txt /usr/share/nginx/html/
(注:上述文件可以是任何文件。我们的目的是把一些文件放到我们拉出来的nginx镜像中,并创建一个新镜像,我们将把它推送到Artifactory)
3.组织创建后,安装Artifactory-Azure DevOps插件-您需要通过进入市场安装插件,如下面的截图所示
4.现在通过点击“新建项目”按钮创建一个新项目,如图所示
并通过给出细节来创建项目
5.现在是时候创建管道了。请查看下面的截图
它会要求你选择你的Dockerfile在哪里,基本上就是源代码。选择GitHub作为您的源代码提供程序,然后选择存储库名称。完成身份验证后,它将创建一个基本模板。
6.我们需要创建Artifactory连接和docker注册表,如下所示。这些将用于通过Artifactory验证Azure DevOps,以及将在任务中使用的docker注册表。它的创建方式如下-
〇艺术服务连接
注意:请将实例的URL配置为“https://
Docker连接——
7.现在是时候创建管道了。我们将定义如下所示的一些变量,我们将在将要创建的任务中使用它们参数:
—name: prodName
displayName:要构建的产品
类型:字符串
默认值:nginx的
—name:注册表
displayName:注册表主机名
类型:字符串
默认值:test.jfrog.io”
—名称:targetRepo
displayName:要推送到的目标回购
类型:字符串
默认值:“k-docker”
变量:
prodName: ${{参数。prodName}}
注册表:${{参数。注册表}}
targetRepo: ${{参数。targetRepo}}
buildContext:“测试- $ (prodName)”
imageNameTb:“(注册中心)/美元(targetRepo) /测试- $ (prodName) '
imageNameBase:“(注册中心)/ (targetRepo) /美元$ (prodName) '
8.我们必须有四个任务
A.人工工具安装程序-按如下方式创建-
一旦选择“安装自定义版本”复选框,就可以安装特定版本的JFrog CLI。默认情况下,将选择最新版本。但是,请确保在Artifactory中创建了存储库“cli”,如下所示
B.然后添加拉docker基础镜像的任务。这个任务来自Artifactory-Azure DevOps插件
这里我们可以定义具体的图像名称,如“Nginx”。但是,我们已经将图像的变量定义为“imageNameBase”。所以我们在这里用它。基本上,我们希望将图像拉为“arturl/k-docker/nginx”,并从上面定义的“imageNameBase”变量中将创建如上所述的图像。
定义docker构建的任务。这是与Azure DevOps捆绑在一起的默认任务。Artifactory - Azure DevOps插件没有docker构建选项。所以我们用默认的docker任务-来构建它
正如您所看到的,“构建上下文”保持空白。因此,当生成相关代码时,将有一个属性为“buildContext”,该属性将是空白的。我们可以从生成的代码中删除该属性。
这个任务将从GitHub页面中选择Dockerfile,然后构建新的docker镜像
D.现在已经构建了docker映像。您将能够在Azure DevOps任务日志中看到任务中的日志,如下所示
成功建造acb00a56ee2e
成功标记test.jfrog.io/k-docker/test-nginx:20220517.2
现在,我们将使用如下所示的任务将这个新创建的映像推送到Artifactory存储库
这将把映像推送到docker存储库并创建一个build-info。Json文件,其中包含所有与构建相关的信息,以及作为docker构建的一部分所需的依赖项和所有环境变量。
E.现在我们需要推送build-info。json”文件,并将其发送到Artifactory, Artifactory将其注册为Artifactory中的构建。任务如下-
在此之后,我们必须使用JFrog x射线扫描构建。任务将定义如下-
使用link -创建策略和规则//www.si-fil.com/confluence/display/JFROG/Creating+Xray+Policies+and+Rules
2.确保在创建策略时在策略规则中启用以下选项
3.需要在JFrog平台的索引资源中包含构建。2022世界杯阿根廷预选赛赛程但是,当第一次使用x射线扫描任务创建构建时,它将跳过x射线扫描步骤,因为构建未包含在Indexed Resources中。2022世界杯阿根廷预选赛赛程这就是为什么建议使用include或Exclude模式来包含构建。在这个例子中,Include模式是" */** "。这意味着平台将把推送到Artifactory的所有构建添加到索引资源中2022世界杯阿根廷预选赛赛程
有关索引资源的更多详细信息,还建议您阅读这篇知识库文章2022世界杯阿根廷预选赛赛程//www.si-fil.com/knowledge-base/xray-how-to-index-and-scan-all-builds-in-xray-in-the-unified-platform/
触发:
——主
池:
vmImage: ubuntu-latest
参数:
—name: prodName
displayName:要构建的产品
类型:字符串
默认值:nginx的
—name:注册表
displayName:注册表主机名
类型:字符串
默认值:test.jfrog.io”
—名称:targetRepo
displayName:要推送到的目标回购
类型:字符串
默认值:“k-docker”
变量:
prodName: ${{参数。prodName}}
注册表:${{参数。注册表}}
targetRepo: ${{参数。targetRepo}}
buildContext:“测试- $ (prodName)”
imageNameTb:“(注册中心)/美元(targetRepo) /测试- $ (prodName) '
imageNameBase:“(注册中心)/ (targetRepo) /美元$ (prodName) '
步骤:
-任务:ArtifactoryToolsInstaller@1
displayName: 'Install Build deps'
输入:
artifactoryService:“kayal-art”
cliInstallationRepo:“cli”
-任务:ArtifactoryDocker@1
displayName: 'Pull Image'
输入:
命令:“拉”
artifactoryService:“kayal-art”
sourceRepo:“k-docker”
imageName:“$ (imageNameBase) '
-任务:Docker@2
displayName: 'Build Image'
输入:
containerRegistry:“ArtDocker”
库:“(targetRepo) /美元(buildContext) '
命令:“构建”
Dockerfile:“(Build.SourcesDirectory) / Dockerfile美元”
——build-arg BASEIMAGE=$(imageNameBase)
标签:|
$ (Build.BuildNumber)
-任务:ArtifactoryDocker@1
displayName: 'Push Image'
输入:
命令:“推”
artifactoryService:“kayal-art”
targetRepo:“k-docker”
imageName:“(imageNameTb):美元(Build.BuildNumber) '
collectBuildInfo:真
buildName:“$ (Build.DefinitionName) '
buildNumber:“$ (Build.BuildNumber) '
includeEnvVars:真
-任务:ArtifactoryPublishBuildInfo@1
displayName: '发布构建信息'
输入:
artifactoryService:“kayal-art”
buildName:“$ (Build.DefinitionName) '
buildNumber:“$ (Build.BuildNumber) '
-任务:ArtifactoryXrayScan@1
displayName: ' x射线扫描'
输入:
artifactoryService:“kayal-art”
buildName:“$ (Build.DefinitionName) '
buildNumber:“$ (Build.BuildNumber) '
allowFailBuild:真
请注意,Azure DevOps插件在后台运行JFrog CLI。所以基本上,我们在这里做的步骤,除了docker构建的步骤,我们是按照这个博客中提到的步骤来做的//www.si-fil.com/blog/manage-your-docker-builds-with-jfrog-cli-in-5-easy-steps/
