Jenkins Workflow CD与Kubernetes

时间:2016-07-21 12:58:29

标签: jenkins kubernetes jenkins-pipeline

澄清一下,这不是关于在Kubernetes中运行Jenkins的问题,而是关于从Jenkins部署到Kubernetess。

我最近决定使用Jenkins(以及工作流程/管道插件)来协调我们的交付流程。目前,我正在使用命令式样式进行部署,如下所示:

stage 'Deploy to Integ'
  // Clean up old releases
  sh "kubectl delete svc,deployment ${serviceName} || true"
    def cmd = """kubectl run ${serviceName} --image=${dockerRegistry}/${serviceName}:${env.BUILD_NUMBER} --replicas=2 --port=${containerPort} --expose --service-overrides='{ "spec": { "type": "LoadBalancer"  }}' """
    // execute shell for the command above
  sh cmd

这很有效,因为${env.BUILD_NUMBER}在管道中持续存在,这使我很容易确保我部署的版本一直都是一样的。我遇到的问题是我想使用声明式方法,因为这不可扩展,我想在VCS中定义。

不幸的是,声明性方法带来了需要在yaml中明确声明图像版本(待部署)的负面影响。解决这个问题的一种方法可能是使用latest标记,但这会带来风险。例如,让我们将我即将部署latest的方案用于生产,并将新版本标记为latest。新latest可能尚未通过测试。

我可以通过编程方式更改文件,但感觉相当笨重,并且无法帮助已签出文件的开发人员了解最新版本。

你做了什么来解决这个问题?我错过了一些明显的东西吗你使用什么工作流程?

1 个答案:

答案 0 :(得分:2)

在我的yaml文件(server.origin.yml)中,我将图片设置为image-name:$BUILD_NUMBER

然后我跑:envsubst < ./server.origin.yml > ./server.yml
此命令将使用环境变量

的值替换字符串$BUILD_NUMBER