Azure Конвейер Jenkins: сбой сборки заголовка плохого пакета во время Azure публикации веб-приложения sh Этап - PullRequest
0 голосов
/ 05 февраля 2020

Ситуация
Я установил Jenkins, используя шаблон решения, предоставленный Microsoft, и создал довольно простое c конвейерное задание Jenkins на Azure. В настоящее время работа извлекает код из моего личного репозитория Git на GitHub, выполняет некоторые простые операции, архивирует некоторые файлы сборки, пытается развернуть zip-файл в моем WebApp.

Я гарантировал, что точно такой же набор файлов включен в zip-файл, поэтому его размер практически не меняется.

Когда все готово для публикации sh, он вызывает функцию azureWebAppPublish (часть службы приложений Azure: https://plugins.jenkins.io/azure-app-service) со всеми правильными параметрами, требуемыми для Azure. За несколько прогонов работы все работает, и я могу S SH в свое веб-приложение и посмотреть мой zip-файл - отлично. Однако через некоторое время он начинает замедляться и, в конечном итоге, прерываться.

Во время вызова azureWebAppPublish в консоли регистрируется следующее:

Starting Azure Web App Deployment
Cloning repository https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git
 > git init /var/lib/jenkins/workspace/<my-jenkins-pipeline-name>/.azure-deploy # timeout=30
Fetching upstream changes from https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git
 > git --version # timeout=30
using GIT_ASKPASS to set credentials 
 > git fetch --tags --progress https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git +refs/heads/*:refs/remotes/origin/* # timeout=30

Проблема
Операция git fetch --tags, показанная в последней строке приведенного выше фрагмента кода на относительно новом WebApp (т.е. без предыдущих развертываний), выполняется довольно быстро. Однако после многочисленных развертываний в одном и том же WebApp оно начинает занимать все больше и больше времени. В других тестах, которые я сделал, это заняло 30 минут, что явно нежелательно.

Вопрос 1: Почему каждый раз для выполнения git fetch --tags требуется намного больше времени и можно ли это предотвратить? Я предполагаю, что это из-за развертывания Git, которое Azure выполняет для не-1084 * приложений, но тем не менее, должно ли это действительно привести к значительному увеличению времени?

Ниже приведены некоторые результаты для поддержки this.

Развертывание 1: 2 м 25 с (Предполагается однократное из-за холодного запуска в результате создания WebApp)
Развертывание 2: 1 м 26 с
Развертывание 3: 1 м 37 с
Развертывание 4: 1 м 58 с
Развертывание 5: 2 м 13 с
Развертывание 6: 2 м 49 с
Развертывание 7: 3 м 17 с
Развертывание 8: 6 м 56 с
Развертывание 9: 8 м 3 с (ОТКАЗ) )
Развертывание 10: 9 м 3 с (ОТКАЗ)

Как показано выше, есть два сбоя. Любое задание, выполняемое после развертывания 10, также приведет к тем же ошибкам, а также к увеличению времени выполнения. Все сбои с одним и тем же сообщением об ошибке:

hudson.plugins.git.GitException: Command "git fetch --tags --progress https://<my-web-app-name>.scm.azurewebsites.net:443/<my-web-app-name>.git +refs/heads/*:refs/remotes/origin/*" returned status code 128:
...
remote: Compressing objects: n% (x/y)
...
fatal: The remote end hung up unexpectedly
fatal: protocol error: bad pack header

Вопрос 2: Почему эта ошибка заголовка плохого пакета происходит часто, так как время, затрачиваемое вызовом git fetch --tags, увеличивается?

Я ценю любые справки / объяснения по этому поводу, так как я довольно новичок в Azure / DevOps в целом. Большое спасибо!

То, что я пробовал до сих пор

  • Увеличено время ожидания с 10 м для стандартных операций git до 30 м (org.jenkinsci.plugins.gitclient.Git.timeOut)
  • Увеличено время ожидания для операций клонирования (расширенное поведение клона) и увеличено время ожидания для операции извлечения (расширенное поведение проверки)
  • Установите для мелкого клона значение true вместе с глубиной 1
  • Добавлены следующие настройки конфигурации git для моей виртуальной машины Jenkins: Git Сбой при извлечении с ошибкой заголовка неверного пакета
  • Проверено количество тегов в рабочей области конвейера Jenkins после результат git выборки (git tag | wc -l), он сообщил, что было только 9

1 Ответ

0 голосов
/ 06 февраля 2020

TL; DR - Быстрый ответ
Это для меня было исправлено путем обновления (увеличения) моего Плана обслуживания приложений (см .: https://azure.microsoft.com/en-gb/pricing/details/app-service/linux/). Первоначально он был на B1, обновлен до B3, и проблема исчезла.

Более длинный ответ
Azure Веб-чат был невероятно полезен, была выявлена ​​высокая средняя нагрузка на мое WebApp. и мне было рекомендовано обновить как виртуальную машину Jenkins, так и план обслуживания приложений.

После выполнения обеих операций скорость развертывания мгновенно упала. Теперь развертывания постоянно работают и каждый раз занимают всего 10 секунд, и это здорово. Я решил провести дальнейшее тестирование и обнаружил, что обновление виртуальной машины Jenkins оказало незначительное влияние по сравнению с обновлением плана обслуживания приложений. С тех пор я сократил виртуальную машину Jenkins для использования плана B1ms (1 vCPU и 2 ГБ ОЗУ), и он работает отлично.

Исходя из этого опыта, из-за тенденции выполнения каждого задания каждый раз все дольше и дольше , Я бы рекомендовал увеличить время ожидания с 10 м для стандартных операций git до чего-то большего (Готово, установив org.jenkinsci.plugins.gitclient.Git.timeOut), как указано выше. Я не могу комментировать, если какой-либо другой элемент, который я изложил выше, оказал большое влияние, но в любом случае дайте ему go, если вы столкнетесь с подобными проблемами.

Большое спасибо Prem из команды поддержки Azure

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...