Дженкинс Пипилин: получение команды awk для хорошего воспроизведения

#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 работать, поскольку это может оказаться полезным в других задачах