用于插入列表环境变量的Jenkinsfile管道语法
我很难想出如何在Jenkins文件中向kubernet添加EnvVar 我很确定问题出在我的语法中,因为我遇到了以下错误用于插入列表环境变量的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
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实现了。这是报告问题的地方。。这就是我遵循的例子