избегая sed-заявления в jenkinsfile - PullRequest
1 голос
/ 15 апреля 2019

Я пытаюсь создать сценарий конвейера в jenkins для создания образа докера и развертывания его через helm в kubernetes. номер версии диаграммы и docker-image - это SemVer с добавлением краткой формы git commit-hash. версия хранится в env VERSION, а хеш коммита - в env GIT_COMMIT_SHORT.

Я хочу отредактировать Chart.yaml и values.yaml штурвальной диаграммы с помощью sed, чтобы она соответствовала тегу версии docker-image и chart, e. г. 2.7.1-9fa6sof8.

Я пытался поставить фигурные скобки вокруг $VERSION и $GIT_COMMIT_SHORT, но это не сработало. Я пытался сбежать $ с помощью \, но тогда он не будет интерпретировать envs.

Оператор sed для редактирования Chart.yaml:

sh """sed -i 's/^version: .*\$/version: $VERSION-$GIT_COMMIT_SHORT/' $CHART_NAME/Chart.yaml"""

ошибка, которую я вижу в Дженкинсе:

sed -i s / ^ версия:. * $ / Версия: 2.7.1-9fa6sof8 / $ CHART_NAME / Chart.yaml

sed: -e выражение # 1, символ 39: неопределенная команда `s '

Мне нужно утверждение с правильными escape-кодами.

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

попробуйте GNU SED

 sed -Ei 's!^(version: ).*$!\12.7.1-9fa6sof8!' $CHART_NAME/Chart.yaml

Я понятия не имею, настоящая проблема, может выставить -i для проверки, прежде чем использовать его в sh "....

0 голосов
/ 16 апреля 2019

Вы можете использовать команду sed в тройной одинарной кавычке, например:

'''sed -i "s/^version: .*/version: $VERSION-$GIT_COMMIT_SHORT/" $CHART_NAME/Chart.yaml'''

Обычно для интерполяции переменных в команде sed используются двойные кавычки. Если кавычки не используются, все пробелы должны быть заключены в кавычки, и другие изменения могут потребовать добавления (в зависимости от параметров, контекста и т. Д.).

.* соответствует всем остальным строкам, а $ здесь избыточно.

...