Jenkins 中的未知阶段部分 "withKubeConfig"
Unknown stage section "withKubeConfig" in Jenkins
我将使用 jenkins CICD 将我的 docker 映像部署到 k8s 集群。
我在 Jenkins 中安装了 Kubernetes CLI 和 SSH Agent。
我使用了下面的代码。
stage('List pods') {
withKubeConfig([credentialsId: 'kubectl-user']) {
sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'
sh 'chmod u+x ./kubectl'
sh './kubectl get pods -n dev'
}
}
而且,我收到以下错误。
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 39: Unknown stage section "withKubeConfig". Starting with version 0.5, steps in a stage must be in a ‘steps’ block. @ line 39, column 2.
stage('List pods') {
^
WorkflowScript: 39: Expected one of "steps", "stages", or "parallel" for stage "List pods" @ line 39, column 2.
stage('List pods') {
^
2 errors
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:571)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:523)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:337)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
我错过了什么吗?
您似乎在声明性管道中使用 scripted pipeline syntax,因此您看到了错误。
如果您想使用声明性管道语法,则必须严格遵守 formatting guidelines,在您的情况下,您缺少 stage 指令下的 steps 指令。
您的代码应该类似于:
pipeline {
agent any
stages {
stage('List Pods') {
steps {
withKubeConfig([credentialsId: 'kubectl-user']) {
sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'
sh 'chmod u+x ./kubectl'
sh './kubectl get pods -n dev'
}
}
}
}
}
如果您想使用脚本化的管道语法,它将类似于:
node {
stage('List Pods') {
withKubeConfig([credentialsId: 'kubectl-user']) {
sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'
sh 'chmod u+x ./kubectl'
sh './kubectl get pods -n dev'
}
}
}
您可以read more here了解两种管道语法之间的差异。
我将使用 jenkins CICD 将我的 docker 映像部署到 k8s 集群。
我在 Jenkins 中安装了 Kubernetes CLI 和 SSH Agent。
我使用了下面的代码。
stage('List pods') {
withKubeConfig([credentialsId: 'kubectl-user']) {
sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'
sh 'chmod u+x ./kubectl'
sh './kubectl get pods -n dev'
}
}
而且,我收到以下错误。
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 39: Unknown stage section "withKubeConfig". Starting with version 0.5, steps in a stage must be in a ‘steps’ block. @ line 39, column 2.
stage('List pods') {
^
WorkflowScript: 39: Expected one of "steps", "stages", or "parallel" for stage "List pods" @ line 39, column 2.
stage('List pods') {
^
2 errors
at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.doParse(CpsGroovyShell.java:142)
at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:127)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:571)
at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:523)
at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:337)
at hudson.model.ResourceController.execute(ResourceController.java:97)
at hudson.model.Executor.run(Executor.java:429)
我错过了什么吗?
您似乎在声明性管道中使用 scripted pipeline syntax,因此您看到了错误。
如果您想使用声明性管道语法,则必须严格遵守 formatting guidelines,在您的情况下,您缺少 stage 指令下的 steps 指令。
您的代码应该类似于:
pipeline {
agent any
stages {
stage('List Pods') {
steps {
withKubeConfig([credentialsId: 'kubectl-user']) {
sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'
sh 'chmod u+x ./kubectl'
sh './kubectl get pods -n dev'
}
}
}
}
}
如果您想使用脚本化的管道语法,它将类似于:
node {
stage('List Pods') {
withKubeConfig([credentialsId: 'kubectl-user']) {
sh 'curl -LO "https://storage.googleapis.com/kubernetes-release/release/v1.20.5/bin/linux/amd64/kubectl"'
sh 'chmod u+x ./kubectl'
sh './kubectl get pods -n dev'
}
}
}
您可以read more here了解两种管道语法之间的差异。