如何使用Azure DevOps构建docker,并将其推送到ARTIFACTORY
这篇KB文章的目的是用一个简单的用例开始Azure DevOps构建过程。
简介
Azure DevOps是一个CI/CD工具,通过它我们可以构建多种包类型。在这篇KB文章中,我们将讨论docker构建。docker构建有四个步骤
- 使用docker注册表提取docker映像。在这种情况下,它是Artifactory。
- 使用我们提取的映像构建一个docker映像。
- 将图像推送到Artifactory并发布构建信息。
- 使用JFrog x射线扫描构建
以下步骤:
- 创建Dockerfile并上传到GitHub存储库。示例Docker文件如下所示
ARG BASEIMAGE
从BASEIMAGE美元
#从nginx
执行echo $BASEIMAGE命令
执行命令rm /etc/nginx/conf.d/*
删除文件
添加helloworld.conf /etc/nginx/conf.d/
添加index.html /usr/share/nginx/html/
添加artii -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”
—name: targetRepo
displayName:要推送到的目标回购
类型:字符串
默认值:“k-docker”
变量:
prodName: ${{参数。prodName}}
注册表:${{parameters。注册表}}
targetRepo: ${{parameters。targetRepo}}
buildContext:“测试- $ (prodName)”
imageNameTb:“(注册中心)/美元(targetRepo) /测试- $ (prodName) '
imageNameBase:“(注册中心)/ (targetRepo) /美元$ (prodName) '
8.我们有四个任务
A. Artifactory工具安装程序-创建如下-
选中“install Custom version”复选框后,您可以安装特定版本的JFrog CLI。默认情况下,将选择最新版本。但是,请确保您在Artifactory中创建了存储库“cli”,如下所示-
B.然后添加抽取docker base image的任务。这个任务来自于Artifactory-Azure DevOps插件
在这里,我们可以定义特定的图像名称,如“Nginx”。但是,我们已经在上面定义了图像的变量“imageNameBase”。所以我们在这里用它。基本上,我们希望将图像拉为“arturl/k-docker/nginx”,并从上面定义的“imageNameBase”变量中创建如上所述的图像。
C.为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。具体任务如下-
F.在此之后,我们必须使用JFrog x射线扫描构建。任务定义如下-
使用此链接创建策略和规则//www.si-fil.com/confluence/display/JFROG/Creating+Xray+Policies+and+Rules
2.确保在创建策略时在策略的规则中启用以下选项-
3.需要在JFrog平台的索引资源中包含构建。2022世界杯阿根廷预选赛赛程但是,当第一次使用x射线扫描任务创建构建时,它将跳过x射线扫描步骤,因为构建未包含在索引资源中。2022世界杯阿根廷预选赛赛程这就是为什么建议使用include或Exclude模式来包含构建。对于本例,Include模式是“*/**”。这意味着平台将把所有推送到Artifactory的构建添加到索引资源中2022世界杯阿根廷预选赛赛程
有关索引资源的更多详细信息,也建议阅读这篇KB文章-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”
—name: targetRepo
displayName:要推送到的目标回购
类型:字符串
默认值:“k-docker”
变量:
prodName: ${{参数。prodName}}
注册表:${{parameters。注册表}}
targetRepo: ${{parameters。targetRepo}}
buildContext:“测试- $ (prodName)”
imageNameTb:“(注册中心)/美元(targetRepo) /测试- $ (prodName) '
imageNameBase:“(注册中心)/ (targetRepo) /美元$ (prodName) '
步骤:
-任务:ArtifactoryToolsInstaller@1
displayName: 'Install Build deps'
输入:
artifactoryService:“kayal-art”
cliInstallationRepo:“cli”
-任务:ArtifactoryDocker@1
displayName: '提取图像'
输入:
命令:“拉”
artifactoryService:“kayal-art”
sourceRepo:“k-docker”
imageName:“$ (imageNameBase) '
-任务:Docker@2
displayName: '生成图像'
输入:
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/