使用 CI (Jenkins) 在 kubernetes 中使用 kubectl set image 命令创建部署的行业标准解决方案是什么
What is the industry standard solution for creating a deployment using CI (Jenkins) using kubectl set image command in kubernetes
目前我正在使用 Jenkins 和 kubernetes 进行 CI/CD 管道的实现演示。我创建了一个 Jenkins 管道作业,并在我的 Jenkinsfile 中添加了每个步骤。对于 kubernetes ,我为 Kubernetes 资源创建了部署和服务 YAML 文件。
镜像版本管理部署中
对于我的 SVN 存储库中的每个提交,我通过 Jenkins 环境变量添加标签作为内部版本号来创建 docker 图像。
image:1
image:2
.
.
image:n
迷茫
如果我在我的 Jenkinsfile 部署阶段使用 kubectl set image
命令更新我的部署,那么它适用于第一次提交吗?
我感到很困惑,因为命令说如果 YAML 文件中定义的图像发生变化,它会更新部署。因此,如果我根据内部版本号 (image-name:buildnumber) 为每个提交更改图像,那么如果没有部署出口,它会第一次工作吗?
所以我可以想到多种方法,一种有点老套,另一种是我喜欢的。您可以根据自己的喜好来决定。
解决方案 1 - 您可以在 Jenkins 中添加一个简单的条件签入,如果部署不存在,则第一次创建它并将其设置为第一个映像。从第二次提交开始更新。
或
解决方案 2 - 将其视为每个存储库或服务都应该有自己的 deployment.yml
。因此,当第一次签入代码时,您可以使用该 yml 检查部署是否已经存在?如果它不只是使用 kubectl apply myapp.yml
创建开发,并且对于第二次提交 kubectl set image
将起作用。
目前我正在使用 Jenkins 和 kubernetes 进行 CI/CD 管道的实现演示。我创建了一个 Jenkins 管道作业,并在我的 Jenkinsfile 中添加了每个步骤。对于 kubernetes ,我为 Kubernetes 资源创建了部署和服务 YAML 文件。
镜像版本管理部署中
对于我的 SVN 存储库中的每个提交,我通过 Jenkins 环境变量添加标签作为内部版本号来创建 docker 图像。
image:1
image:2
.
.
image:n
迷茫
如果我在我的 Jenkinsfile 部署阶段使用 kubectl set image
命令更新我的部署,那么它适用于第一次提交吗?
我感到很困惑,因为命令说如果 YAML 文件中定义的图像发生变化,它会更新部署。因此,如果我根据内部版本号 (image-name:buildnumber) 为每个提交更改图像,那么如果没有部署出口,它会第一次工作吗?
所以我可以想到多种方法,一种有点老套,另一种是我喜欢的。您可以根据自己的喜好来决定。
解决方案 1 - 您可以在 Jenkins 中添加一个简单的条件签入,如果部署不存在,则第一次创建它并将其设置为第一个映像。从第二次提交开始更新。
或
解决方案 2 - 将其视为每个存储库或服务都应该有自己的 deployment.yml
。因此,当第一次签入代码时,您可以使用该 yml 检查部署是否已经存在?如果它不只是使用 kubectl apply myapp.yml
创建开发,并且对于第二次提交 kubectl set image
将起作用。