Как запустить работу powershell параллельно на размещенном конвейере AzureDevops - PullRequest
0 голосов
/ 19 февраля 2020

-EDIT 03-

Я редактирую свой вопрос, потому что комментарии слишком малы.

Я наконец-то выполнил свою задачу. Мне пришлось отредактировать Publish-UpgradedServiceFabricApplication, чтобы принять «CompareApplicationName» и «CompareMode». Затем он будет использовать их для определения списка сервисов, которые будут обновлены. Я должен был быть осторожен, чтобы не отменить повторную регистрацию ApplicationType, пока не завершу обновление всех приложений.

Извините, но мой юридический отдел не позволит мне опубликовать какой-либо действительный код, заявив, что он является IP-адресом компании. .

-EDIT 02-

Ошибка пользователя Оказывается, Get-VstsInput не возвращает никакого значения при вызове из потока. Таким образом, все оценки были неправильными, и ошибка была поглощена потоком. Я переписываю, чтобы просто передать вызов на Publish-UpgradedServiceFabricApplication.

-Оригинальное сообщение-

У меня есть сервисный кластер fabri c с несколькими работающими сервисами. Некоторые из них являются динамически создаваемыми службами, поэтому в ServiceManifest на них нет ссылок. xml

У меня есть пользовательская задача, которая обновляет динамически созданные службы последовательно, но это занимает часы. Я пытаюсь запустить Publish-UpgradedServiceFabricApplication параллельно, чтобы я мог запустить все задания обновления одновременно. Задания начинаются (я думаю), но задача никогда не дожидается их окончания sh до окончания (и, следовательно, завершения заданий PS).

Я пытался добавить Do...While l oop в состоянии задания, но оно по-прежнему преждевременно завершает задачу.

Как сохранить задачу активной во время выполнения обновления?

-EDIT-

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

    foreach($serviceapp in $servicefabricapp){
        if(-not ($serviceapp.ApplicationName.OriginalString.StartsWith("fabric:/DynamicService"))) {
            Write-Host "Application '$($serviceapp.ApplicationName.OriginalString)' does not start with 'fabric:/DynamicService' -SKIPPING"
            continue 
        }

        $foundTaxReturnApp = $true
        Write-Host "Starting upgrade for $($serviceapp.ApplicationName.OriginalString)"
        Start-Job -ScriptBlock $upgradeScriptBlock -ArgumentList $serviceapp.ApplicationName, $applicationPackagePath, $applicationParameterFile, $publishProfile, $isUpgrade, $upgradeParameters

        Start-Sleep 5
    }

    $jobCount = (Get-Job | Where-Object{ $_.state -eq 'Running'}).Count

    Do {
        Start-Sleep -Seconds 30
        Write-Host "Waiting for $jobCount jobs to finish..."
        $jobCount = (Get-Job | Where-Object{ $_.state -eq 'Running'}).Count
    } while ($jobCount -gt 0)

    Get-Job

    $jobCount = (Get-Job | Where-Object{ $_.state -eq 'Running'}).Count

    Write-Host "Finished waiting, $jobCount jobs running."

Это вывод в конвейер. Между «обновлением для fabri c: / DynamicService-2019OA20200131__16_21_39» и «Ожиданием завершения 0 заданий до конца sh ...» не проходит. И ни одно из DynamicServices не будет обновлено.

Application 'fabric:/MyFabricSystem' does not start with 'fabric:/DynamicService' -SKIPPING
Starting upgrade for fabric:/DynamicService
VERBOSE: Exporting function 'New-PSWorkflowSession'.
VERBOSE: Exporting alias 'nwsn'.

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command
--     ----            -------------   -----         -----------     --------             -------
1      Job1            BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018CA20200128__13_35_06
3      Job3            BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018FA20200130__16_12_16
5      Job5            BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018GA20200130__16_12_16
7      Job7            BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018IA20200131__16_21_39
9      Job9            BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018IB20200131__16_21_39
11     Job11           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018KA20200121__15_08_01
13     Job13           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018OA20200131__16_21_39
15     Job15           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018PA20200131__16_21_39
17     Job17           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018SA20200130__16_12_16
19     Job19           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018XA20200127__16_43_45
21     Job21           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2018YA20200124__15_17_35
23     Job23           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2019GA20200130__16_12_16
25     Job25           BackgroundJob   Running       True            localhost            ...
Starting upgrade for fabric:/DynamicService-2019OA20200131__16_21_39
27     Job27           BackgroundJob   Running       True            localhost            ...
Waiting for 0 jobs to finish...
1      Job1            BackgroundJob   Completed     True            localhost            ...
3      Job3            BackgroundJob   Completed     True            localhost            ...
5      Job5            BackgroundJob   Completed     True            localhost            ...
7      Job7            BackgroundJob   Completed     True            localhost            ...
9      Job9            BackgroundJob   Completed     True            localhost            ...
11     Job11           BackgroundJob   Completed     True            localhost            ...
13     Job13           BackgroundJob   Completed     True            localhost            ...
15     Job15           BackgroundJob   Completed     True            localhost            ...
17     Job17           BackgroundJob   Completed     True            localhost            ...
19     Job19           BackgroundJob   Completed     True            localhost            ...
21     Job21           BackgroundJob   Completed     True            localhost            ...
23     Job23           BackgroundJob   Completed     True            localhost            ...
25     Job25           BackgroundJob   Completed     True            localhost            ...
27     Job27           BackgroundJob   Completed     True            localhost            ...
Finished waiting, 0 jobs running.
##[debug]Leaving D:\a\_tasks\DynamicServiceUpgrade_4ec0e9dc-0f0a-47ff-86e3-ca0ae22d21d9\0.0.31\taskmain.ps1.

1 Ответ

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

В этом случае скрипт выполняется правильно. Концепция работы заключается в том, чтобы выполнить и двигаться дальше. Если вы хотите дождаться окончания работ до 100 * * просто Get-Job | Wait-Job после выполнения всех ваших заданий. do-while l oop

Do {
 $Job = Get-Job
 if ($Job.Status -eq "Failed") {
  "Fail"
  Exit 1
 }
Sleep 10
} Until ($Job.Status -eq "Success")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...