在jenkins管道中的阶段内动态生成代理
我在管道作业中有此配置在jenkins管道中的阶段内动态生成代理,jenkins,kubernetes,dynamic,jenkins-pipeline,agent,Jenkins,Kubernetes,Dynamic,Jenkins Pipeline,Agent,我在管道作业中有此配置 def k8sTestPodTemplate(docker_image) { return """ apiVersion: v1 kind: Pod metadata: name: my-agent labels: name: my-agent spec: serviceAccountName: jenkins containers: - name: python image: ${docker_imag
def k8sTestPodTemplate(docker_image) {
return """
apiVersion: v1
kind: Pod
metadata:
name: my-agent
labels:
name: my-agent
spec:
serviceAccountName: jenkins
containers:
- name: python
image: ${docker_image}
command: ["/bin/bash", "-c", "cat"]
tty: true
"""
}
pipeline {
agent none
stages {
stage('Run tests') {
parallel {
stage('Tests Python 3.5') {
agent {
kubernetes {
defaultContainer 'jnlp'
yaml k8sTestPodTemplate('python:3.5')
}
}
steps {
container('python') {
sh "echo 'Hello from Python 3.5'"
}
}
}
stage('Tests Python 3.6') {
agent {
kubernetes {
defaultContainer 'jnlp'
yaml k8sTestPodTemplate('python:3.6')
}
}
steps {
container('python') {
sh "echo 'Hello from Python 3.6'"
}
}
}
stage('Tests Python 3.7') {
agent {
kubernetes {
defaultContainer 'jnlp'
yaml k8sTestPodTemplate('python:3.7')
}
}
steps {
container('python') {
sh "echo 'Hello from Python 3.7'"
}
}
}
}
}
}
}
但正如您所看到的,我可以很容易地将此代码改进为:
def k8sTestPodTemplate(docker_image) {
return """
apiVersion: v1
kind: Pod
metadata:
name: my-agent
labels:
name: my-agent
spec:
serviceAccountName: jenkins
containers:
- name: python
image: ${docker_image}
command: ["/bin/bash", "-c", "cat"]
tty: true
"""
}
def generateStage(docker_image) {
return {
stage("Tests ${docker_image}") {
agent {
kubernetes {
defaultContainer 'jnlp'
yaml k8sTestPodTemplate("${docker_image}")
}
}
steps {
container('python') {
sh "echo ${docker_image}"
}
}
}
}
}
pipeline {
agent none
stages {
stage('Run tests') {
parallel {
generateStage("python:3.5")
generateStage("python:3.6")
generateStage("python:3.7")
}
}
}
}
但我不能让它工作。问题是詹金斯提出了一个错误
在步骤中未找到此类DSL方法“代理”
我在“step”指令中使用“agent”指令,并且动态生成代理。不完全是答案,但可以使用脚本管道语法实现:不完全是答案,但可以使用脚本管道语法实现: