用于插入列表环境变量的Jenkinsfile管道语法

用于插入列表环境变量的Jenkinsfile管道语法,jenkins,kubernetes,jenkins-pipeline,Jenkins,Kubernetes,Jenkins Pipeline,我很难想出如何在Jenkins文件中向kubernet添加EnvVar 我很确定问题出在我的语法中,因为我遇到了以下错误 ava.lang.ClassCastException: class org.csanchez.jenkins.plugins.kubernetes. ContainerTemplate.setEnvVars() expects java.util.List<org.csanchez.jenkins.plugins.kubernetes.model.TemplateEn

我很难想出如何在Jenkins文件中向kubernet添加EnvVar

我很确定问题出在我的语法中,因为我遇到了以下错误

ava.lang.ClassCastException: class org.csanchez.jenkins.plugins.kubernetes.
ContainerTemplate.setEnvVars() expects java.util.List<org.csanchez.jenkins.plugins.kubernetes.model.TemplateEnvVar
> but received class java.lang.String
ava.lang.ClassCastException: class org.csanchez.jenkins.plugins.kubernetes.
ContainerTemplate.setEnvVars() expects java.util.List<org.csanchez.jenkins.plugins.kubernetes.model.TemplateEnvVar
> but received class java.lang.String
你们能给我指一下正确的方向吗?如何在文件中定义列表变量

我的文件设置

pipeline {
agent any
parameters {
    string(name: 'Abc', defaultValue: 'origin', description: 'test project')
}
options {
    timestamps()
    timeout(60)
}
stages {
    stage('Build') {
        parallel {
            stage("build") {
                agent {
                    kubernetes {
                        label 'kubernetes'
                        containerTemplate {
                            name 'jnlp'
                            image 'ubuntu:latest'
                            ttyEnabled true
                            label 'label'
                            envVars 'envVar(key: "filePath", value: "/home/abcde/abc" )'
                        }
                    }
                }
                steps {
                    container('jnlp') {
                        timeout(60) {
                            // build process
                        }
                    }
                }
            }
        }
    }
}
post {
    success {
        sh "success"
    }
    failure {
        sh "failed"
    }
    unstable {
        sh "unsable"
    }
  } 
}
使用上面的代码,我将得到以下错误

ava.lang.ClassCastException: class org.csanchez.jenkins.plugins.kubernetes.
ContainerTemplate.setEnvVars() expects java.util.List<org.csanchez.jenkins.plugins.kubernetes.model.TemplateEnvVar
> but received class java.lang.String
ava.lang.ClassCastException: class org.csanchez.jenkins.plugins.kubernetes.
ContainerTemplate.setEnvVars() expects java.util.List<org.csanchez.jenkins.plugins.kubernetes.model.TemplateEnvVar
> but received class java.lang.String
ava.lang.ClassCastException:class org.csanchez.jenkins.plugins.kubernetes。
ContainerTemplate.setEnvVars()需要java.util.List,但收到的类是java.lang.String
看看他们的例子

看来你的情况应该是这样的

stage("build") {
    agent {
        kubernetes {
            label 'kubernetes'
            containerTemplate {
                name: 'jnlp',
                image: 'ubuntu:last',
                ttyEnabled: true,
                label: 'kub_catkin_node',
                envVars: [
                    containerEnvVar(key: "filePath", value: "/home/abcde/abc" )
                ]
            }
        }
    }
}

UI和管道都支持这一点,但在声明性管道中可能不太支持。
一种解决方案是使用管道脚本。另一个方法是检查它是否在以后的版本中得到更好的支持(如果您还没有使用最新版本)。

这就是我如何让它工作的。注意Yaml语法。亚姆不喜欢标签

pipeline {
agent any
parameters {
    string(name: 'Abc', defaultValue: 'origin', description: 'The Gitlab project name')
}
options {
    timestamps()
    timeout(60)
}
stages {
    stage('Build') {
        parallel {
            stage("build") {
                agent {
                     kubernetes {
                     label 'label'
                     defaultContainer 'jnlp'
                     yaml """
apiVersion: v1
kind: Pod
metadata:
  labels:
    some-label: label
spec:
  containers:
  - name: jnlp
    image: ubuntu:latest
    tty: true
    env:
    -   name: 'filePATH'
        value: 'fileValue'
"""
                        }
                        steps {
                            container('jnlp') {
                                timeout(60) {
                                    // build process
                                }
                            }
                        }
                    }
                }
            }
        }
        post {
            success {
                sh "success"
            }
            failure {
                sh "failed"
            }
            unstable {
                sh "unsable"
            }
          } 
        }

这是我收到的错误消息“rg.codehaus.groovy.control.multipleComplationErrorsException:启动失败:WorkflowScript:26:意外标记:jnlp@line 26,第38列。名称:'jnlp',”。我已经看到了这个示例,并且能够在管道作业中成功运行。但是,如果我将该语法放在Jenkinfile中,则该语法不起作用。如果它像管道一样工作,而不像Jenkinsfile那样工作,听起来你没有正确地复制代码Hi Yuri,对不起,我应该从一开始就提供更多信息。上述语法不起作用的原因是,我在管道{}内调用kubernet,而不是在podTemplate{}。请看一下我原来的帖子。我添加了我的Jenkins文件设置。如果删除envVars行,则可以成功运行作业。问题是将值(列表类型)分配给envVars变量。您好,Yuri,声明性管道中不支持此操作。我举了一个例子:你是对的。声明性管道中不支持此操作。我使用yaml实现了。这是报告问题的地方。。这就是我遵循的例子