В конвейерах Azure как я могу выполнить фоновую задачу во время выполнения других задач? - PullRequest
1 голос
/ 08 октября 2019

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

Я пробовал: docker pull imgname &

Это работает, ноконвейер жалуется на это сообщение:

Потоки STDIO не закрывались в течение 10 секунд после события выхода из процесса '/ bin / bash'. Это может указывать на то, что дочерний процесс унаследовал потоки STDIO и еще не завершился.

Я также пробовал что-то вроде:

  • docker pull imgname </dev/null &>/dev/null & disown
  • docker pull imgname 0>&- 1>&- 2>&- 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &

И несколько похожих трюков. Ничего не помогает

Это не имеет большого значения, но было бы удобно узнать, как сделать это возможным!

1 Ответ

1 голос
/ 09 октября 2019

Обновление

Потоки STDIO не закрывались в течение 10 секунд после события выхода из процесса / bin / bash. Это может указывать на то, что дочерний процесс унаследовал потоки STDIO и еще не завершился

Это не сообщение об ошибке, которое не записало в стандартный поток ошибок и не выполнило задачу.

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

После включения режима отладки в конвейере сборки мы можем увидеть

enter image description here

## [debug] Задача была помечена как «выполнено», но процесс не закрылся через 5 секунд. Обработка задачи как завершенной.

Процесс должен по-прежнему выполняться в качестве фона, даже если задача уже помечена как завершенная.


Согласно вашему описанию, это, похоже, не относится к команде Docker или стороне Azure Devops.

Вам просто нужно запустить скрипт powershell (задействовать команду docker) в фоновом режиме.

Например: Запустите Start-Job внутри Задачи PowerShell, этот сценарий начнет выполняться с использованием Receive-Job. Когда задача завершается, сценарий останавливается.

В задаче PowerShell я запускаю следующее:

Start-Job -FilePath "C:\build\BGGetFromNuGet.ps1" -ArgumentList "C:\build"

Подробнее см. По этой ссылке - Запуск задания

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

Start-Process powershell.exe -ArgumentList '-file C:\build\BGGetFromNuGet.ps1'
...