Как мне использовать grep и tr с pipe в качестве команды bash в файле Jenkins?

#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'