#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 и принятый ответ не сработает!