Устранение неполадок при запуске конвейера

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Если выполнение конвейера завершится сбоем, вы можете использовать диагностические сведения и журналы, предоставляемые сводной страницей запуска конвейера, чтобы помочь устранить проблему.

Снимок экрана: страница сводки запуска конвейера.

Просмотреть журналы

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

Снимок экрана: сообщение об ошибке задачи на странице сводки запуска конвейера.

Отображается страница журналов с выбранной ошибкой. В этом примере в cmd-line задаче возникает ошибка, в которой echo команда вводится как ech.

Снимок экрана: журнал диагностика для запуска конвейера.

Вы можете просмотреть необработанный журнал для задачи, выбрав "Просмотреть необработанный журнал" и выполнить поиск по журналу с помощью поиска.

Снимок экрана: параметры представления журнала в Azure DevOps.

Проверьте журналы неудачной задачи для получения сведений об ошибках и подсказках о том, почему задача завершается ошибкой. По умолчанию журналы, отличные от параметров, создаются выполнением конвейера. Если журналы по умолчанию не указывают причину проблемы, вы можете получить дополнительные сведения , настроив подробные журналы.

Страница анализа ошибок

Помощь по устранению неполадок доступна на странице анализа ошибок. Переместите указатель мыши на строку сведений об ошибке и выберите значок анализа представления.

Снимок экрана: значок анализа представления на странице сводки запуска конвейера.

Снимок экрана: значок анализа представления для Azure DevOps Server.

Выберите "Просмотреть агент " для локальных агентов (или образ размещенного агента для агентов, размещенных майкрософт), чтобы просмотреть дополнительные сведения об агенте, используемом для запуска конвейера, и просмотреть журнал для просмотра журналов выполнения конвейера.

Снимок экрана: страница анализа ошибок на портале Azure DevOps.

Выберите имя задачи под сведениями о времени выполнения, чтобы просмотреть сведения о задаче.

Снимок экрана: сведения о задаче из анализа ошибок.

В этом примере вы увидите, что в Value элементе <a0/a0> есть ошибка. Выберите "Об этой задаче ", чтобы просмотреть документацию для задачи.

Если проблема не отображается на странице сводки запуска конвейера или просмотре журналов, проверка следующий раздел "Распространенные проблемы" и просмотрите журналы для диагностики проблем конвейера для получения сведений о скачивании полных журналов, включающих дополнительные диагностические сведения.

Распространенные проблемы

Аналитика задач для неудачных запусков конвейера

Azure DevOps предоставляет параметр задачи Аналитика для неудачных запусков конвейера, который при включении предоставляет всплывающие уведомления о сбоях сборки со ссылкой для просмотра отчета.

Снимок экрана: метрики аналитики задач.

Чтобы настроить этот параметр, перейдите к функциям предварительной версии, найдите Аналитика задачи для неудачных запусков конвейера и выберите нужный параметр.

Снимок экрана: аналитические сведения о задачах для параметра неудачных запусков конвейера.

Время ожидания задания

Конвейер может выполняться в течение длительного времени, а затем завершается сбоем из-за времени ожидания задания. Время ожидания задания тесно зависит от используемого агента. Бесплатные агенты, размещенные в Майкрософт, используют максимальное время ожидания в 60 минут на задание для частного репозитория и 360 минут для общедоступного репозитория. Чтобы увеличить максимальное время ожидания для задания, можно выбрать любой из следующих вариантов.

  • Купите агент, размещенный в Майкрософт, который предоставит вам 360 минут для всех заданий, независимо от используемого репозитория
  • Используйте локальный агент, чтобы исключить любые проблемы со временем ожидания, связанные с агентом

Узнайте больше о времени ожидания задания.

Примечание.

Если задания агента, размещенные корпорацией Майкрософт, истекают сроки ожидания, убедитесь, что вы не указали время ожидания конвейера, которое меньше максимального времени ожидания для задания. Сведения о проверка см. в разделе "Время ожидания".

Проблемы со скачиванием кода

Сбой конвейера на шаге проверка out

Если вы используете checkout шаг в репозитории Azure Repos Git в вашей организации, который находится в проекте, отличном от конвейера, убедитесь, что область ограничения авторизации задания на текущий параметр проекта отключен или выполните действия, описанные в удостоверений сборки Scoped, чтобы убедиться, что конвейер имеет доступ к репозиторию.

Если конвейер не может получить доступ к репозиторию из-за ограниченной авторизации задания область, вы получите ошибкуGit fetch failed with exit code 128, а журналы будут содержать запись, аналогичнуюRemote: TF401019: The Git repository with name or identifier <your repo name> does not exist or you do not have permissions for the operation you are attempting.

Если конвейер завершается сбоем немедленно Could not find a project that corresponds with the repository, убедитесь, что имя проекта и репозитория правильно в шаге checkout или объявлении ресурса репозитория.

проблемы система управления версиями Team Foundation (TFVC)

Получение источников, не скачивая некоторые файлы

Это может быть охарактеризовано сообщением в журнале "Все файлы до актуальной версии" из tf get команды. Убедитесь, что у встроенного удостоверения службы есть разрешение на скачивание источников. Для скачивания источников потребуется разрешение на скачивание источников в зависимости от выбранной авторизации область на вкладке "Общие" конвейера сборки. В пользовательском веб-интерфейсе управления версиями можно просматривать файлы проекта на любом уровне иерархии папок и проверять параметры безопасности.

Получение источников с помощью прокси-сервера Team Foundation

Самый простой способ настроить агент для получения источников через прокси-сервер Team Foundation — задать переменную TFSPROXY среды, которая указывает на прокси-сервер TFVC для запуска от имени пользователя агента.

Windows:

    set TFSPROXY=http://tfvcproxy:8081
    setx TFSPROXY=http://tfvcproxy:8081 // If the agent service is running as NETWORKSERVICE or any service account you can't easily set user level environment variable

Mac OS и Linux:

    export TFSPROXY=http://tfvcproxy:8081

Сбой конвейера выполняется на шаге командной строки, например MSBUILD

Полезно сузить, является ли сбой сборки или выпуска результатом проблемы с продуктом Azure Pipelines/TFS (агент или задачи). Сбои сборки и выпуска могут также привести к внешним командам.

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

Например, проблема возникает во время части конвейера сборки MSBuild (например, вы используете задачу MSBuild или Visual Studio Build )? Если да, попробуйте выполнить ту же команду MSBuild на локальном компьютере, используя те же аргументы. Если вы можете воспроизвести проблему на локальном компьютере, выполните следующие действия, чтобы изучить проблему MSBuild .

Макет файла

Расположение средств, библиотек, заголовков и других вещей, необходимых для сборки, может отличаться от размещенного агента, чем на локальном компьютере. Если сборка завершается ошибкой, так как она не может найти один из этих файлов, можно использовать приведенные ниже скрипты для проверки макета агента. Это может помочь вам отслеживать отсутствующий файл.

Создайте новый конвейер YAML во временном расположении (например, новый репозиторий, созданный для устранения неполадок). Как было написано, скрипт выполняет поиск каталогов по пути. При необходимости можно изменить SEARCH_PATH= строку для поиска других мест.

# Script for Linux and macOS
pool: { vmImage: ubuntu-latest } # or whatever pool you use
steps:
- checkout: none
- bash: |
    SEARCH_PATH=$PATH  # or any colon-delimited list of paths
    IFS=':' read -r -a PathDirs <<< "$SEARCH_PATH"
    echo "##[debug] Found directories"
    for element in "${PathDirs[@]}"; do
        echo "$element"
    done;
    echo;
    echo;  
    echo "##[debug] Found files"
    for element in "${PathDirs[@]}"; do
        find "$element" -type f
    done
# Script for Windows
pool: { vmImage: windows-2019 } # or whatever pool you use
steps:
- checkout: none
- powershell: |
    $SEARCH_PATH=$Env:Path
    Write-Host "##[debug] Found directories"
    ForEach ($Dir in $SEARCH_PATH -split ";") {
      Write-Host "$Dir"
    }
    Write-Host ""
    Write-Host ""
    Write-Host "##[debug] Found files"
    ForEach ($Dir in $SEARCH_PATH -split ";") {
      Get-ChildItem $Dir -File -ErrorAction Continue | ForEach-Object -Process {
        Write-Host $_.FullName
      }
    }

Различия между локальной командной строкой и агентом

Помните, что некоторые различия в действии при выполнении команды на локальном компьютере и при выполнении сборки или выпуска агента. Если агент настроен на запуск в качестве службы в Linux, macOS или Windows, он не выполняется в интерактивном сеансе, вошедшего в систему. Без интерактивного сеанса, взаимодействия с пользовательским интерфейсом и других ограничений существуют.

Ошибки использования файла или папки

File or folder in use Ошибки часто указываются сообщениями об ошибках, такими как:

  • Access to the path [...] is denied.
  • The process cannot access the file [...] because it is being used by another process.
  • Access is denied.
  • Can't move [...] to [...]

Действия по устранению неполадок.

Обнаружение используемых файлов и папок

В Windows такие средства, как монитор процессов, можно записать трассировку событий файлов в определенном каталоге. Кроме того, для моментального снимка можно использовать такие средства, как процесс Обозреватель или дескриптор.

Исключение антивирусной защиты

Антивирусное программное обеспечение, проверяющее файлы, может привести к ошибкам использования файлов или папок во время сборки или выпуска. Добавление исключения антивирусной защиты для каталога агента и настроенной рабочей папки может помочь определить антивирусное программное обеспечение в качестве процесса вмешательства.

MSBuild и /nodeReuse:false

При вызове MSBuild во время сборки обязательно передайте аргумент /nodeReuse:false (короткая форма /nr:false). В противном случае процессы MSBuild останутся запущенными после завершения сборки. Процессы остаются в течение некоторого времени в ожидании потенциальной последующей сборки.

Эта функция MSBuild может препятствовать попыткам удаления или перемещения каталога из-за конфликта с рабочим каталогом процесса MSBuild.

Задачи сборки MSBuild и Visual Studio уже добавляются /nr:false в аргументы, переданные в MSBuild. Однако при вызове MSBuild из собственного скрипта необходимо указать аргумент.

MSBuild и /maxcpucount:[n]

По умолчанию задачи сборки, такие как MSBuild и Visual Studio Build , запускают MSBuild с /m помощью переключателя. В некоторых случаях это может вызвать такие проблемы, как несколько проблем с доступом к файлам процесса.

Попробуйте добавить /m:1 аргумент в задачи сборки, чтобы заставить MSBuild выполнять только один процесс за раз.

Проблемы с использованием файлов могут возникнуть при использовании функции параллельного процесса MSBuild. Не указывая аргумент /maxcpucount:[n] (короткая форма /m:[n]) указывает MSBuild использовать только один процесс. Если вы используете задачи сборки MSBuild или Visual Studio, может потребоваться указать "/m:1", чтобы переопределить аргумент "/m", добавленный по умолчанию.

Периодические или несогласованные сбои MSBuild

Если возникают периодические или несогласованные сбои MSBuild, попробуйте указать MSBuild использовать только один процесс. Периодические или несогласованные ошибки могут указывать на то, что целевая конфигурация несовместима с функцией параллельного процесса MSBuild. См. раздел MSBuild и /maxcpucount:[n].

Процесс перестает отвечать

Процесс перестает отвечать на причины и действия по устранению неполадок:

Ожидание входных данных

Процесс, который перестает отвечать, может указывать на то, что процесс ожидает входных данных.

Запуск агента из командной строки интерактивного входа в сеанс может помочь определить, запрашивается ли процесс с диалоговым окном для ввода данных.

Запуск агента в качестве службы может помочь устранить запросы на ввод программ. Например, в .NET программы могут полагаться на логическое значение System.Environment.UserInteractive, чтобы определить, следует ли запрашивать запрос. Если агент работает в качестве службы Windows, значение равно false.

Дамп обработки

Анализ дампа процесса может помочь определить, какой взаимоблокируемый процесс ожидает.

Проект WiX

Создание проекта WiX при включении пользовательских средств ведения журнала MSBuild может привести к взаимоблокировке wiX, ожидающих выходного потока. Добавление дополнительного аргумента /p:RunWixToolsOutOfProc=true MSBuild будет работать над проблемой.

Окончание строк для нескольких платформ

При запуске конвейеров на нескольких платформах иногда возникают проблемы с различными конец строки. Исторически, Linux и macOS использовали символы линии (LF), в то время как Windows использовала возврат каретки плюс линию (CRLF). Git пытается компенсировать разницу путем автоматического завершения строк в репозитории, но CRLF в рабочем каталоге в Windows.

Большинство средств Windows хорошо с концами только для LF, и это автоматическое поведение может вызвать больше проблем, чем решение. Если возникают проблемы на основе конец строки, рекомендуется настроить Git, чтобы предпочитать LF везде. Для этого добавьте .gitattributes файл в корневой каталог репозитория. В этом файле добавьте следующую строку:

* text eol=lf

Переменные с добавлением '(одинарный кавычки)

Если конвейер содержит скрипт Bash, который задает переменные с помощью ##vso команды, может появиться дополнительное ' добавление к значению заданной переменной. Это происходит из-за взаимодействия с set -x. Решение заключается в временном отключении set -x перед настройкой переменной. Синтаксис Bash — set +x.

set +x
echo ##vso[task.setvariable variable=MY_VAR]my_value
set -x

Почему это происходит?

Многие скрипты Bash включают set -x команду для поддержки отладки. Bash будет отслеживать именно то, какая команда была выполнена и эхо его в stdout. Это приведет к тому, что агент дважды увидит ##vso команду, а второй раз Bash добавит ' символ в конец.

Например, рассмотрим этот конвейер:

steps:
- bash: |
    set -x
    echo ##vso[task.setvariable variable=MY_VAR]my_value

В stdout агент увидит две строки:

##vso[task.setvariable variable=MY_VAR]my_value
+ echo '##vso[task.setvariable variable=MY_VAR]my_value'

Когда агент видит первую строку, MY_VAR будет задано правильное значение "my_value". Однако, когда он видит вторую строку, агент будет обрабатывать все до конца строки. MY_VAR для параметра "my_value" будет задано значение "my_value".

Библиотеки не устанавливаются для приложения Python при выполнении скрипта

При развертывании приложения Python в некоторых случаях конвейер CI/CD выполняется и код развертывается успешно, но файл requirements.txt , отвечающий за установку всех библиотек зависимостей, не выполняется.

Чтобы установить зависимости, используйте скрипт после развертывания в задаче развертывания Служба приложений. В следующем примере показана команда, используемая в скрипте после развертывания. Скрипт можно обновить для вашего сценария.

D:\home\python364x64\python.exe -m pip install -r requirements.txt

Сведения об устранении неполадок, связанных с подключениями к службам, см. в разделе "Устранение неполадок с подключением службы".

Конвейер перестал слышать от агента

Если конвейер завершается ошибкой с сообщением, напримерWe stopped hearing from agent <agent name>. Verify the agent machine is running and has a healthy network connection., проверка использование ресурсов агента, чтобы узнать, не работает ли компьютер агента. Начиная с Sprint 228 журналы Azure Pipelines содержат метрики использования ресурсов для каждого шага.

При использовании Azure DevOps Services можно просмотреть использование ресурсов в журналах, включая использование дисков, использование памяти и использование ЦП, включение подробных журналов. По завершении конвейера выполните поиск по журналам записей Agent environment resources для каждого шага.

2024-02-28T17:41:15.1315148Z ##[debug]Agent environment resources - Disk: D:\ Available 12342.00 MB out of 14333.00 MB, Memory: Used 1907.00 MB out of 7167.00 MB, CPU: Usage 17.23%

Сведения о сборе дополнительных журналов использования ресурсов см. в разделе "Сбор сведений об использовании ресурсов".

Включение Обозреватель службы хранилища для развертывания статического содержимого, например .css и .js на статический веб-сайт из Azure DevOps с помощью Azure Pipelines

В этом сценарии можно использовать задачу копирования файлов Azure для отправки содержимого на веб-сайт. Вы можете использовать любой из инструментов, описанных в разделе "Отправка содержимого" для отправки содержимого в веб-контейнер.

Следующие шаги