#powershell
Вопрос:
У меня есть сценарий powershell, который используется для упаковки артефактов на сервере сборки team city. Сценарий powershell был создан с помощью рабочего процесса, чтобы мы могли использовать параметр-Parallel для выполнения операций параллельно друг другу.
Этот сценарий работал, как и ожидалось, но недавно мы объединили некоторые проекты в одно решение, чтобы упростить разработку. После этого изменения сценарий пакета больше не работает, поскольку он не может получить доступ к файлам, поскольку они используются другим процессом.
Без опции-Parallel наши сборки занимают дополнительные 5 минут, поэтому мне было интересно, есть ли способ изменить сценарий, чтобы по-прежнему выполнять упаковку параллельно.
Конфигурация сборки состоит из нескольких задач:
- Создайте решение
- Упакуйте решение в артефакты
В настоящее время сценарий с ошибкой (в списке проектов около 20 проектов для упаковки):
dotnet tool install --global Amazon.Lambda.Tools 2gt;$null $prjs = ( [pscustomobject]@{ Path = "PathToProject"; ZipFileName = "projectName-deploy-package.zip" }, [pscustomobject]@{ Path = "PathToAnotherProject"; ZipFileName = "anotherProject-deploy-package.zip" }, ) foreach ($prj in $prjs) { # Create the path to the zip file $PathToZip = $prj.Path "binreleasenetcoreapp3.1" $prj.ZipFileName # Delete cached zip file if any Write-Host "Testing Path... " $PathToZip if (Test-Path $PathToZip) { Write-Host "Deleting... " $PathToZip Remove-Item $PathToZip } } workflow LambdaPackingWorkflow { param ([object[]]$prjs) foreach -Parallel ($prj in $prjs) { # Create the path to the zip file $PathToZip = $prj.Path "binreleasenetcoreapp3.1" $prj.ZipFileName Invoke-Expression ($env:USERPROFILE ".dotnettoolsdotnet-lambda.exe package --project-location " $prj.Path " --configuration release --framework netcoreapp3.1 --msbuild-parameters ""--no-dependencies -v:q"" --output-package " $PathToZip) } } LambdaPackingWorkflow -prjs $prjs | Format-Table Path, ZipFileName