如何修复Pipeline-Script“预期的步骤”错误

时间:2019-04-04 06:02:38

标签: jenkins jenkins-pipeline

我试图用两个阶段在jenkins中运行一个简单的管道脚本。 脚本本身会创建一个textFile并检查该文本文件是否存在。 但是,当我尝试运行作业时,出现“预期步骤”错误。

('Write')阶段似乎工作得很好,因此在('Check')阶段也是如此。

我读过某个地方的某个步骤中不能有if的信息,这可能是一个或一个问题,但是如果是这样,我如何不使用if进行检查?

pipeline {
    agent {label 'Test'}
    stages {
        stage('Write') {
            steps {
                writeFile file: 'NewFile.txt', text: 
                '''Sample HEADLINE
                This is the secondary HEADLINE ...
                In this third Line below the HEADLINE we will write some larger Text, to give the HEADLINE some Context lets see how that ends up looking. HEADLINE ... HEADLINE ... This should be long enough ...'''
                println "New File created..."
            }
        }
        stage('Check') {
            steps {        
                Boolean bool = fileExists 'NewFile.txt'
                if(bool) {
                    println "The File exists :)"
                }
                else {
                    println "The File does not exist :("
                }            
            }
        }
    }
}

我希望该脚本在代理工作区中创建一个“ NewFile”,然后将文本打印到控制台以确认其存在。

但是我实际上收到两个“预期的步骤”错误。 以Boolean bool = ...开头的行 并在if(bool) ...

2 个答案:

答案 0 :(得分:1)

您缺少script块。 引用(Source):

  

脚本步骤需要一段脚本管道并执行该脚本   在声明式管道中。

    stage('Check') {
        steps {        
            script {
                Boolean bool = fileExists 'NewFile.txt'
                if(bool) {
                    println "The File exists :)"
                }
                else {
                    println "The File does not exist :("
                }   
            }         
        }
    }

基本上,可以在脚本块中使用所需的所有内容。 Groovy,if,try-catch等等等。

答案 1 :(得分:1)

您可能会遇到"Expected a step"错误的原因有很多。

发生事故是因为我使用单引号'而不是双引号"来包围步骤脚本。例如:

stage("Build") {
    steps {
        sh "./build.sh ${SECRET_KEY}"
    }
}

上面使用的字符串使用字符串插值(或者我想它被称为“模板字符串”?),不适用于单引号字符串。

如果有人来自Google并且接受的答案无效,我想在这里添加此答案!