#linux #bash #jenkins #groovy #grep
#linux #bash #дженкинс #groovy #grep
Вопрос:
я использую команду grep с tr для доступа к версии из файла, который находится в моем текущем каталоге. Команда grep работает, но не в контексте файла Jenkins в качестве переменной.
У меня есть это:
grepVersion='${grep -we "^version:" myconfig.yaml | tr -d "version:[:blank:]"}'
Я хочу это:
myPath='something_"${grepVersion}"'
поскольку это:
echo "{$myPath}"
output: something_0.0.2
Если бы я много пробовал, было бы здорово, если бы кто-нибудь мог мне помочь с этим.
мой файл Jenkins выглядит примерно так:
pipeline {
stages {
stage('Build') {
steps {
script {
echo "build something"
}
}
}
stage('Deploy'){
steps{
script {
#grep version from file
grepVersion='${grep -we "^version:" myconfig.yaml | tr -d "version:[:blank:]"}'
#access archivePath
archivePath="${WORKSPACE}/archives/${env.JOB_NAME}_"${grepVersion}".mtar"
#deploy something with arhivePath
sh 'XX deploy "${archivePath}" -f'
}
}
}
}
}
Эта команда работает и получает доступ к правильной версии:
grep -we "^version:" myconfig.yaml |tr -d "version:[:blank:]"
У меня есть следующий файл в моем path, к которому я хочу получить доступ к версии: 0.0.2 как 0.0.2, чтобы объединить его с моей переменной archivePath.
ID
Name
version: 0.0.2
different_version: 0.0.2
different_version: 0.0.3
Следующая команда работает в оболочке bash и может получить доступ к правильной версии: 0.0.2
grep -we "^version:" myconfig.yaml |tr -d "version:[:blank:]"
Но это не будет работать с файлом Jenkins и контекстом groovy.
Если вы пробовали следующие команды для доступа к 0.0.2, чтобы использовать его в качестве переменной bash :
Здесь «^» создает проблему:
grepVersion=${grep -we "^version:" myconfig.yaml |tr -d "version:[:blank:]"}
Здесь команды не разрешаются из-за двойных кавычек:
grepVersion="${grep -we '^version:' myconfig.yaml |tr -d 'version:[:blank:]'"'
…
grepVersion='$(grep -we '^version:' myconfig.yaml |tr -d 'version:[:blank:]')"
и так далее, пока не найдено решение.
Спасибо за вашу помощь уже.
Комментарии:
1.
tr -d 'version'
будет помнить каждогоe
,i
,n
, ,o
,r
,s
, иv
персонажа. Это почти наверняка не то, чего вы хотите. Вы что — то ищетеsed -n 's/^version:[[:blank:]]*//p' myconfig.yaml
?2. Вам также необходимо обернуть всю команду grep в вызов sh.
Ответ №1:
большое спасибо, вы оба были правы!
Следующая команда работает для меня:
grepVersion=sh 'sed -n s/^version:[[:blank:]]*//p mta.yaml'