В Shell имя переменной не разрешено использовать .
, поэтому вы получаете следующую ошибку: bad substitution
В Groovy есть 4 способа представления строки:
- одиночная кавычка: 'строка'
- тройная одинарная кавычка: '' 'строка' ''
- двойная кавычка: "строка"
- двойная кавычка: "" "строка" ""
А Groovy выполняет интерполяцию строк только для строк двойной и тройной двойной кавычки.
Например:
def name = 'Tom'
print "Hello ${name}"
print """Hello ${name}"""
// do interpolation before print, thus get Hello Tom printed out
print 'Hello ${name}'
print '''Hello ${name}'''
//no interpolation thus, print Hello ${name} out directly.
BUILD_NUMBER
- переменная встроенной среды задания Jenkins.Вы можете напрямую получить к нему доступ в shell / bat.
static def printbn() {
sh '''
#!/usr/bin/env bash
echo ${BUILD_NUMBER}
// directly access any Jenkins build-in environment variable,
// no need to use pattern `env.xxxx` which only works in groovy not in shell/bat
'''
}
Если вы хотите использовать шаблон env.xxxx
, вы можете заархивировать его с помощью шпунтовой интерполяции строк.
static def printbn() {
// use pipeline step: echo
echo "${env.BUILD_NUMBER}" // env.BUILD_NUMBER is groovy variable
// or use pipeline step: sh
sh """#!/usr/bin/env bash
echo ${env.BUILD_NUMBER}
"""
// will do interpolation firstly, to replace ${env.BUILD_NUMBER} with real value
// then execute the whole shell script.
}