В вашем примере есть два недоразумения. Когда вы используете двойные кавычки в Jenkinsfile, вы создаете Groovy String , который заменяет переменные (определенные с помощью знака $
) соответствующими значениями (или выражениями.)
Другое недоразумение создание переменной bash за один шаг sh
и доступ к ней на другом шаге sh
. Это не сработает. Каждый sh
шаг выполняется в своем собственном процессе оболочки, и любая локальная переменная, созданная в одной оболочке, не может быть доступна в другой.
Вы можете решить обе проблемы. Во-первых, вам нужно заменить двойные кавычки одинарными в шаге sh
. Во-вторых, вам нужно определить скрипт оболочки за один sh
шаг. Для этого можно использовать Groovy многострочную строку (тройные кавычки). Рассмотрим следующий пример:
pipeline {
agent any
stages {
stage("Test") {
steps {
// Below code prints nothing
sh 'something="BUILD 00062100 Listen"'
sh 'echo ${something:6:8}'
// Below code prints 00062100
sh '''
something="BUILD 00062100 Listen"
echo ${something:6:8}
'''
}
}
}
}
Вывод:
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
+ something='BUILD 00062100 Listen'
[Pipeline] sh
+ echo
[Pipeline] sh
+ something='BUILD 00062100 Listen'
+ echo 00062100
00062100
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS