#bash #jenkins #awk #jenkins-pipeline #pypi
#bash #дженкинс #awk #дженкинс-конвейер #pypi
Вопрос:
У меня есть возможность загрузить tar-файл последнего pip-пакета через URL-запрос (не для загрузки в формате pip). Таким образом, я попытался использовать grep для последней версии, просмотрев необработанный html. Итак, для исходного кода https://pypi.org/project/astroid/#files Я делаю
awk '/release--current">/,/<div class="release"/' html | awk '/"release__version">/{flag=1;next}/</p>/{flag=0}flag'|awk '{ gsub(/^[ t] |[ t] $/, ""); print }',
Это просто захват текста между разными тегами, пока я, наконец, не получу то, что хочу. Это отлично работает в командной оболочке, но когда я помещаю команду в конвейер jenkins, она ничего не возвращает. Я предполагаю, что это связано с экранированием:
steps {
cleanWs()
script {
if ( params.PKG_VRS ) {
httpRequest outputFile: 'myfile', responseHandle: 'NONE', url: 'https://pypi.io/packages/source/{ first letter }/{ package name }/{ package name }-{ version }.tar.gz'
} else {
httpRequest outputFile: 'HTMLFILE', responseHandle: 'NONE', url: 'https://pypi.org/project/astroid/#files'
LATEST_VRS = sh (
script: """awk '/release--current">/,/<div class="release"/' html | awk '/"release__version">/{flag=1;next}/</p>/{flag=0}flag'|awk '{ gsub(/^[ t] |[ t] $/, ""); print }'""",
returnStdout: true
).trim()
echo "${LATEST_VRS}"
}
}
}
Я буду благодарен, если кто-нибудь сможет помочь мне разобраться, как правильно избежать awk в команде Jenkins sh, или если есть лучший / более простой способ сделать то, что я хочу, то есть получить последнюю версию пакета PyPI. Насколько я могу судить, для этого нет URL-адреса, и даже если бы это было так, я все равно хотел бы знать нюансы использования awk в Jenkins.
Комментарии:
1. Почему бы не начать с создания
awk 'BEGIN{print "Hello World"}'
работы, а затем продолжить оттуда?2. В PyPI также есть «Простой API» и JSON API , которые могут работать для вас лучше, чем необработанный HTML.
3. Посмотрим, вызываете ли вы внешний скрипт. Таким образом, вам не нужно беспокоиться об экранировании кавычек, двойных кавычках и тому подобном. Другими словами, переместите свой awk-скрипт во внешний скрипт (если возможно, я полагаю, что это не так, но я ничего не знаю о Jenkins).
4. Спасибо всем, я попробую все, что упомянуто выше. API также полезен, но я все еще хочу заставить awk работать, поскольку это может оказаться полезным в других задачах