我正在尝试在kubernetes中运行一个测试docker镜像,它将测试我的应用程序。应用程序容器和测试容器具有相同的版本,如果任何测试或应用程序发生更改,该版本都会递增。如何为kubernetes插件动态定义pod yaml,以便在第一阶段(在kubernetes集群之外)获取版本,然后使用容器的正确版本更新pod yaml?
APP_VERSION = ""
pod_yaml = """
apiVersion: v1
kind: Pod
metadata:
labels:
some-label: ci--my-app
spec:
containers:
- name: test-runner
image: my.docker.registry/app-tester:${-> APP_VERSION}
imagePullPolicy: Always
command:
- cat
tty: true
"""
pipeline {
agent none
stages {
stage('Build and Upload') {
agent { node { label 'builder' } }
steps {
script {
APP_VERSION = sh(
script: "cat VERSION",
returnStdout: true
).trim()
}
}
}
stage('Deploy and Test application') {
agent {
kubernetes {
label 'ci--data-visualizer-kb'
defaultContainer 'jnlp'
yaml pod_yml
}
}
steps {
container('test-runner') {
sh "echo ${APP_VERSION}"
sh "ls -R /workspace"
}
}
}
}
}管道中的kubernetes块不接受包含${-> APP_VERSION}的字符串pod_yaml的延迟计算。有没有解决这个问题的办法,或者我做得完全错了?
PS:由于其他原因,我不能使用脚本化管道。因此,我必须坚持使用声明性管道。
发布于 2018-06-28 16:02:41
这可能有点奇怪,但如果您没有其他选择,您可以使用jinja2模板引擎和python动态生成您想要的文件。看看它--它相当健壮。
https://stackoverflow.com/questions/51077628
复制相似问题