2016-10-15 6 views
1

У меня есть сценарий 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.

ответ

1

Используйте это сделать Termine путь текущего сценария:

$currentDirectory = split-path -parent $MyInvocation.MyCommand.Definition