#git #jenkins #groovy #gitlab #jenkins-pipeline
# #git #дженкинс #groovy #gitlab #дженкинс-конвейер
Вопрос:
я пытаюсь выполнить проверку git в конвейере Дженкинса и пытаюсь выяснить только добавление строк в параллельный файл. однако меня мучает ошибка со знаком доллара в имени динамической ветки, но то же самое работало в другом месте конвейера. единственное новое дополнение к коду — это строка git diff, чтобы найти только добавление новых строк в конкретный файл. Можете ли вы помочь мне достичь этого?
рабочий код:
script{
withCreentials(...){
sh returnStdout: true, script: """
gwit checkout -B ${env.branch}
git config user.name 'xxx'
git config user.email 'xxx@xxx.com'
git add sample.txt
git commit -m "updated from pipeline"
git push origin HEAD:${env.branch}
"""
}
}
не рабочий код:
script{
withCreentials(...){
sh returnStdout: true, script: """
git checkout -B ${env.branch}
git config user.name 'xxx'
git config user.email 'xxx@xxx.com'
git diff HEAD^:sample.txt HEAD:sample.txt --color=always|perl -wine 'print $1 if /^e[32m e[me[32m(.*)e[m$/'> output.txt
}
}
ошибка :
illegal string boy character
solution: either escape a literal dollar sign "$5" or bracket the value expression "${5}"
git checkout -B ${env.branch}
^
Комментарии:
1. Вы могли бы начать с разделения вашей многострочной команды на несколько однострочных команд и посмотреть, какая строка вызывает проблему.
2. Если я удалю команду git diff, как упоминалось выше … все работает нормально.. но когда я добавляю его, ошибка указывает на строку оформления заказа.. именно поэтому трудно понять проблему
3. Ваша строка имеет
print $1
и ошибка говоритeither escape a literal dollar sign "$5" or bracket the value expression "${5}"
. Вы пробовали исправить, как предполагает сообщение об ошибке?4. Tried..no удачи .. но я уверен, что проблема связана с экранированием в команде git diff … с которой я до сих пор не мог разобраться
Ответ №1:
Это действительно распространенная ошибка, в основном при использовании тройных двойных кавычек вам нужно удалить все $
, кроме тех, которые вы хотите расширить как часть интерполяции переменных.
Однако Groovy выводит ошибку в одном из первых вхождений $
вместо фактического места, где у вас есть ошибка
В вашем случае строка с проблемами
git diff HEAD^:sample.txt HEAD:sample.txt --color=always|perl -wine 'print $1 if /^e[32m e[me[32m(.*)e[m$/'> output.txt
У вас есть $1
и [m$
. Решение будет заключаться в том, чтобы избежать их.
С другой стороны, вам нужно будет избежать любой обратной реакции, которая потребуется сценарию
Официальная документация http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings