Я хочу включить скрипт обновления базы данных в свой пакет AWS CodeDeploy, но не вижу, как указать путь к нему.
Я успешно запускаю сценарии PowerShell, и у меня есть сценарий, который вызывает sqlcmd.exe, и я хочу передать sqlcmd сценарий для запуска.
Когда я распечатываю текущий рабочий каталог с Get-Location, он показывает C:\Windows\system32
. Так что, похоже, единственный способ, с помощью которого я мог бы сослаться на это, это узнать текущий путь к пакету.
Есть ли способ определить текущий путь к текущему пакету в сценарии развертывания?
Изменить - Моя настройка
version: 0.0
os: windows
files:
- source: .\source
destination: C:\inetpub\gentest.vanhookservice.com\dev
hooks:
BeforeInstall:
- location: .\scripts\db-backup-test.ps1
timeout: 6000
- location: .\scripts\code-backup-gentest.ps1
timeout: 6000
runas: Administrator
- location: .\scripts\db-upgrade-test.ps1
timeout: 6000
db-upgrade-test.ps1
:
# Fail on all errors
$ErrorActionPreference = 'Stop'
# Are you running in 32-bit mode?
# (\SysWOW64\ = 32-bit mode)
if ($PSHOME -like "*SysWOW64*")
{
Write-Warning "Restarting this script under 64-bit Windows PowerShell."
# Restart this script under 64-bit Windows PowerShell.
# (\SysNative\ redirects to \System32\ for 64-bit mode)
& (Join-Path ($PSHOME -replace "SysWOW64", "SysNative") powershell.exe) -File `
(Join-Path $PSScriptRoot $MyInvocation.MyCommand) @args
# Exit 32-bit script.
Exit $LastExitCode
}
echo "Upgrading test database..."
sqlcmd.exe -S vhs-awsdev-sql1 -d JobManagerDev -i ..\database\upgrade.sql
# Test if the sqlcmd.exe command exited with a success or error condition
if ($? -eq "False")
{
throw "sqlcmd.exe failed with exit code $LastExitCode"
}
echo "Test database upgrade complete."
Проблема в ссылке ..\database\upgrade.sql
. Я также попробовал .\database\upgrade.sql
, потому что так на скрипты ссылаются в appspec.yml
, но реальная проблема в том, что текущий рабочий каталог на самом деле C:\Windows\system32