ARTIFACTORY:如何使用Kaniko通过kubernetes环境中的Jenkins构建和部署docker映像
Kaniko是什么?
从标准Dockerfile构建映像通常依赖于对Docker守护进程的交互式访问,这需要在您的机器上访问根权限才能运行。这使得在无法轻松或安全地公开Docker守护进程的环境中构建容器映像变得困难,例如Kubernetes集群(要了解更多信息,请查看第16个最古老的开放Kubernetes)问题).
为了克服这些挑战,kaniko这是一个开源工具,可以从Dockerfile构建容器映像,即使没有特权根访问权限。使用kaniko,我们都从Dockerfile构建一个映像,并将其推送到注册表。因为它不需要任何特殊的特权或权限,你可以在标准的Kubernetes集群中运行kaniko,谷歌Kubernetes引擎,或者在任何不能访问特权或Docker守护进程的环境中。
在这篇博客中,我们将尝试使用Kubernetes作为构建代理,与Jenkins一起构建Docker映像。
对于这个演示,使用任何云提供商(GKE、EKS、AKS)或minikube创建一个Kubernetes集群,这样我们就可以在集群上安装和配置Jenkins,从而可以使用动态Kubernetes pod构建代理。
另外,Artifactory实例已经启动并运行,这样我们就可以将docker映像拉/推到docker存储库中。
在Kubernetes集群上安装Jenkins
我们将通过执行以下步骤安装詹金斯舵图。
步骤1:
为jenkins helm chart创建yaml文件如下所示。
jnlp.yaml:代理:
启用:真
图片:“詹金斯/ jnlp-agent-docker”
标签:“最新”
runAsUser: 0
runAsGroup: 0
卷:
—type: HostPath
hostPath: /var/run/docker.sock
mountPath: /var/run/docker.sock
—type: HostPath
hostPath: /usr/bin/docker
mountPath: /usr/bin/docker
步骤2:
使用下面的命令来安装Jenkins(我们已经在命名空间Jenkins中创建了Jenkins部署),该命令将在默认情况下使用Kubernetes节点代理配置安装Jenkins。头盔升级——安装Jenkins -f jnlp-docker。Yaml jenkins/jenkins -namespace jenkins
步骤3:
执行以下命令获取Jenkins的管理员密码。Kubectl exec——命名空间Jenkins -它svc/ Jenkins -c Jenkins - /bin/cat /run/secrets/chart-admin-password && echo
步骤4:
运行下面的命令并使用任何浏览器访问Jenkins。Kubectl——命名空间默认端口转发svc/jenkins 8080:8080
要访问Jenkins,请使用浏览器上的URL: http://127.0.0.1:8080
步骤5:
登录Jenkins,为Artifactory安装必要的插件(Jenkins Artifactory插件),并将Artifactory配置为Jenkins。
在Jenkins中创建一个kaniko工作。
现在,我们将创建一个Jenkins管道作业,使用kaniko使用以下步骤构建docker映像。
步骤1:
前提条件:请确保已配置以下作业参数:
SERVER_ID - JFrog实例ID,在Jenkins - > Manage Jenkins - > Configure System中定义
CREDENTIALS—带有用户名和密码的凭据参数类型
ARTIFACTORY_DOCKER_REPO - Artifactory虚拟或远程docker存储库(即docker)
ARTIFACTORY_DOCKER_REGISTRY - Artifactory Docker注册表(即test-docker.jfrog.io)
步骤2:
在Jenkins中使用下面的脚本创建一个Jenkins作业,我们可以根据需要修改脚本。
对于这项工作,我们使用一个带有kaniko执行器容器的pod-模板来构建一个docker映像和一个支持的maven容器,用于将git签出到kaniko执行器。管道{
代理{
kubernetes {
yaml”
apiVersion: v1
:豆荚
规范:
容器:
—名称:maven
图片:maven: 3.8.1-jdk-8
命令:
——睡眠
参数:
- 99 d
-名称:kaniko
图片:gcr.io / kaniko-project /执行人:调试
命令:
——睡眠
参数:
- 9999999
volumeMounts:
-名称:kaniko-secret
mountPath: / kaniko / .docker
restartPolicy:永远不要
卷:
-名称:kaniko-secret
秘密:
secretName: saas-credentials
项目:
—key: .dockerconfigjson
路径:json
“‘
}
}
阶段{
阶段(“克隆”){
步骤{容器('maven') {
Git url: 'https://github.com/scriptcamp/kubernetes-kaniko.git',分支:'main'
}
}
}
stage ('Exec Kaniko') {
步骤{容器('kaniko') {
sh”
猫/ kaniko .docker / json
. /kaniko/executor——context ' pwd '——destination test-docker.jfrog。io / hello-kaniko——image-name-with-digest-file =图像文件
“‘
}
}
}
阶段('运行创建Docker构建'){
{步骤
rtCreateDockerBuild (
serverId:“SERVER_ID”,
sourceRepo:“码头工人”,
kanikoImageFile:“图像文件”
)
}
}
stage('发布构建信息'){
{步骤
rtPublishBuildInfo (
serverId:“SERVER_ID”
)
}
}
}
}
步骤3:
在上面的Jenkins管道脚本中,我们使用了https://github.com/scriptcamp/kubernetes-kaniko Github回购,因此根据回购先决条件,我们将在相同的命名空间Jenkins中创建下面的秘密。kubectl create secret docker-registry saas-credentials——docker-username=$REGISTRY_USER——docker-password=$REGISTRY_PASS——docker-server=test-docker.jfrog。io——docker-email = REGISTRY_EMAIL美元
配置完成后,运行Jenkins作业,它将在不使用根docker访问的情况下构建docker映像,并将映像推送到Artifactory docker存储库,并将docker映像构建信息发布到Artifactory。
