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

时间:2018-04-23 20:47:11

标签: jenkins kubernetes jenkins-pipeline

我很难弄清楚如何在Jenkinsfile中添加envVars到kubernet。

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

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

当我用这种方式编码时

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

你能指点我正确的方向吗?如何在Jenkinsfile中定义列表变量?

我的Jenkinsfile设置

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

3 个答案:

答案 0 :(得分:0)

查看他们的示例https://github.com/jenkinsci/kubernetes-plugin/blob/f6cff5d7e9ce9da3279660159e0cb064efac534f/examples/selenium.groovy#L18

看起来像你的情况应该是

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" )
                ]
            }
        }
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这就是我如何使用它。小心使用Yaml语法。 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"
            }
          } 
        }