Jenkins Workflow CD 与 Kubernetes
Jenkins Workflow CD with Kubernetes
澄清一下,这不是关于 运行 Kubernetes 中的 Jenkins 的问题,而是关于从 Jenkins 部署到 Kubernetes 的问题。
我最近决定使用 Jenkins(和 workflow/pipeline 插件)来协调我们的交付过程。目前,我正在使用命令式样式按以下方式进行部署:
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
可能还没有经过测试。
我可以通过编程方式更改文件,但这感觉相当笨拙,并且无助于签出文件以了解最新内容的开发人员。
你做了什么来解决这个问题?我错过了一些明显的东西吗?您使用的是什么工作流程?
在我的 yaml 文件 (server.origin.yml) 中,我将图像设置为 image-name:$BUILD_NUMBER
然后我运行:envsubst < ./server.origin.yml > ./server.yml
此命令会将字符串 $BUILD_NUMBER
替换为环境变量
的值
澄清一下,这不是关于 运行 Kubernetes 中的 Jenkins 的问题,而是关于从 Jenkins 部署到 Kubernetes 的问题。
我最近决定使用 Jenkins(和 workflow/pipeline 插件)来协调我们的交付过程。目前,我正在使用命令式样式按以下方式进行部署:
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
可能还没有经过测试。
我可以通过编程方式更改文件,但这感觉相当笨拙,并且无助于签出文件以了解最新内容的开发人员。
你做了什么来解决这个问题?我错过了一些明显的东西吗?您使用的是什么工作流程?
在我的 yaml 文件 (server.origin.yml) 中,我将图像设置为 image-name:$BUILD_NUMBER
然后我运行:envsubst < ./server.origin.yml > ./server.yml
此命令会将字符串 $BUILD_NUMBER
替换为环境变量