ARTIFACTORY:如何使用Kaniko在kubernetes环境中通过Jenkins构建和部署docker镜像
Kaniko是什么?
从标准Dockerfile构建镜像通常依赖于对Docker守护进程的交互式访问,这需要在您的机器上进行root访问才能运行。这使得在不能轻松或安全地暴露Docker守护进程的环境中构建容器映像变得困难,例如Kubernetes集群(有关这方面的更多信息,请查看第16个最古老的开放Kubernetes)问题).
为了克服这些挑战,kaniko它是一个开源工具,用于从Dockerfile构建容器映像,即使没有特权根访问权限。使用kaniko,我们从Dockerfile构建镜像并将其推送到注册表。因为它不需要任何特殊的特权或权限,你可以在一个标准的Kubernetes集群中运行kaniko,Google Kubernetes引擎,或者在任何不能访问特权或Docker守护进程的环境中。
在这篇博客中,我们将尝试使用Kubernetes作为构建代理,使用Jenkins构建Docker镜像。
在这个演示中,使用任何云提供商(GKE、EKS、AKS)或minikube创建一个Kubernetes集群,这样我们就可以在集群上安装和配置Jenkins,从而可以使用动态Kubernetes pod构建代理。
此外,Artifactory实例已经启动并运行,这样我们就可以将docker镜像拉/推到docker存储库中。
在Kubernetes集群上安装Jenkins
我们将通过执行以下步骤来安装詹金斯舵图。
步骤1:
如下所示为jenkins helm图表创建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。Helm升级——install Jenkins -f jnlp-docker。Yaml jenkins/jenkins -命名空间jenkins
步骤3:
执行以下命令获取Jenkins的admin密码。Kubectl exec——namespace 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中定义
凭据-凭据参数类型与用户名和密码
ARTIFACTORY_DOCKER_REPO -人工虚拟或远程docker存储库(即docker)
ARTIFACTORY_DOCKER_REGISTRY -人工Docker注册表(即test-docker.jfrog.io)
步骤2:
在Jenkins中使用下面的脚本创建一个Jenkins作业,我们可以根据需要修改脚本。
对于这项工作,我们将使用带有kaniko执行器容器的pod-template来构建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
项目:
—关键字:.dockerconfigjson
路径:json
'''
}
}
阶段{
stage ('Clone') {
步骤{container('maven') {
Git url: 'https://github.com/scriptcamp/kubernetes-kaniko.git',分支:'main'
}
}
}
stage ('Exec Kaniko') {
步骤{container('kaniko') {
sh”
猫/ kaniko .docker / json
/kaniko/executor——context ' pwd '——destination test-docker.jfrog。io / hello-kaniko——image-name-with-digest-file =图像文件
'''
}
}
}
stage ('Run create Docker build') {
{步骤
rtCreateDockerBuild (
serverId:“SERVER_ID”,
sourceRepo:“码头工人”,
kanikoImageFile:“图像文件”
)
}
}
stage('发布构建信息'){
{步骤
rtPublishBuildInfo (
serverId:“SERVER_ID”
)
}
}
}
}
步骤3:
在上面的Jenkins管道脚本中,我们使用了https://github.com/scriptcamp/kubernetes-kaniko Github repo,因此根据repo的先决条件,我们将在相同的命名空间Jenkins中创建下面的secret。——docker-username=$REGISTRY_USER——docker-password=$REGISTRY_PASS——docker-server=test-docker.jfrog。io——docker-email = REGISTRY_EMAIL美元
配置完成后,运行Jenkins作业,它将在不使用root访问的情况下构建docker映像,并将映像推送到Artifactory的docker存储库,并将docker映像的构建信息发布到Artifactory。
