Как исправить ошибку конвейерного скрипта «Ожидаемый шаг»

#jenkins #groovy #jenkins-pipeline

#дженкинс #заводной #дженкинс-конвейер

Вопрос:

Я пытаюсь запустить простой конвейерный скрипт в Дженкинсе с 2 этапами. Сам скрипт создает текстовый файл и проверяет, существует ли он. Но когда я пытаюсь запустить задание, я получаю ошибку «Ожидаемый шаг».

Я где-то читал, что вы не можете иметь if внутри шага, так что это может быть проблемой, но если да, то как я могу проверить, не используя if ?

 pipeline {
    agent {label 'Test'}
    stages {
        stage('Write') {
            steps {
                writeFile file: 'NewFile.txt', text: 
                '''Sample HEADLINE'''
                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.txt » в рабочей области агентов и выведите текст на консоль, подтверждающий, что он существует.

Но на самом деле я получаю две ошибки «Ожидаемый шаг». В строке, начинающейся с Boolean bool = ... и в if(bool) ...

Комментарии:

1. Вы смотрели на jenkins.io/blog/2017/01/19/converting-conditional-to-pipeline

Ответ №1:

Вам не хватает script{} шага, который требуется в декларативном конвейере.

Цитата:

Этап сценария берет блок скриптового конвейера и выполняет его в декларативном конвейере.

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

Ответ №2:

Существует несколько причин, по которым вы можете получить "Expected a step" ошибку.

Моя произошла из-за того, что я использовал одинарные кавычки ' для окружения пошагового скрипта вместо двойных кавычек " . Например:

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

Строка, используемая выше, использует интерполяцию строк (или, я полагаю, это называется «шаблонной строкой»?), Которая не будет работать для строки, заключенной в одинарные кавычки.

Подумал, что добавлю этот ответ сюда на случай, если кто-то придет из Google и принятый ответ не сработает!