У меня есть сценарий PowerShell для развертывания некоторого кода базы данных. Это проект SSDT и структурирована таким образом:Лучший способ структурирования сценария развертывания?
Root
\Deployment
\Scripts
Deploy.ps1
\Config
deploy.config
\SolutionRoot
\DatabaseProject
\UnitTestProject
Для развертывания тест на моей рабочей станции я изменяю \Deployment\Scripts
и запустить Deploy.ps1
и она отлично работает. Когда я запускаю его с моего сервера сборки Jenkins, текущий рабочий каталог является корневой папкой (а не скриптами). Так Deploy.ps1
сценарии не запускается при вызове как: powershell -File Deployment\Scripts\Deploy.ps1
Например, у меня есть этот код в верхней части сценария, как отлаживать:
$currentDirectory = (Get-Item -Path ".\" -Verbose).FullName
Write-Host "Current Working Directory: $currentDirectory"
и при запуске на моей рабочей станции она возвращает:
Current Working Directory: C:\repos\MyRoot\Deployment\Scripts
при запуске на сервере сборки возвращает
Current Working Directory: D:\Jenkins\workspace\MyRootWithADifferentName
Я хотел бы, чтобы сценарий работал независимо от того, где он находится, так что лучший способ узнать местонахождение в структуре каталогов, которые я есть? Серверы сборки могут отличаться, и имя корневого каталога может также меняться, но все остальные являются статическими относительно Root.