【问题标题】:What is the industry standard solution for creating a deployment using CI (Jenkins) using kubectl set image command in kubernetes在 kubernetes 中使用 kubectl set image 命令使用 CI (Jenkins) 创建部署的行业标准解决方案是什么
【发布时间】:2020-03-03 17:21:24
【问题描述】:

目前我正在使用 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)为每个提交更改图像,那么如果没有部署退出,它会第一次工作吗?

【问题讨论】:

  • 嗨雅各布,你能详细说明你的困惑吗?
  • @damitj07 - 我修改了我对问题的困惑。指导我如果我走错了路。我的困惑是使用kubectl set image 在我的管道中进行首次部署。你能看看问题吗?
  • 或者您可以添加一个简单的条件签入您的 Jenkins,如果部署不存在,则第一次创建它并将其设置为第一个图像。从第二次提交开始更新。
  • 是的,所以可以把它想象成每个 repo' 里面都有自己的 deployment.yml。因此,当第一次签入代码时,您可以使用该 yml 来检查部署是否已经存在?如果它不只是使用kubectl apply 创建开发,或者在第二次提交的情况下kubectl set image 将起作用
  • 您只需要名称或某种方式来识别它是否是第一次提交。你可以使用任何方法来做到这一点。

标签: jenkins kubernetes continuous-deployment


【解决方案1】:

所以我可以想出多种方法,一种有点老套,另一种我喜欢。您可以根据最适合您的方式来决定。

解决方案 1 - 您可以在 Jenkins 中添加一个简单的条件签入,如果部署不存在,则第一次创建它并将其设置为第一个图像。从第二次提交开始更新。

或

解决方案 2 - 将其视为每个存储库或服务都应该在其中拥有自己的 deployment.yml。因此,当第一次签入代码时,您可以使用该 yml 检查部署是否已经存在?如果它不只是使用kubectl apply myapp.yml 创建开发,并且第二次提交kubectl set image 将起作用。

【讨论】:

  • 是的。我了解方法。让我试试。
猜你喜欢
  • 2019-01-09
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2016-01-09
  • 2019-08-08
相关资源
最近更新 更多