Ситуация
Я установил 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