Как ссылаться на файл в пакете CodeDeploy AWS при исполнении? - PullRequest
0 голосов
/ 21 января 2020

Я хочу включить скрипт обновления базы данных в свой пакет AWS CodeDeploy, но не вижу, как указать путь к нему.

Я успешно запускаю сценарии PowerShell, и у меня есть сценарий, который вызывает sqlcmd.exe, и я хочу передать sqlcmd сценарий для запуска.

Когда я распечатываю текущий рабочий каталог с Get-Location, он показывает C:\Windows\system32. Так что, похоже, единственный способ, с помощью которого я мог бы сослаться на это, это узнать текущий путь к пакету.

Есть ли способ определить текущий путь к текущему пакету в сценарии развертывания?

Изменить - Моя настройка

enter image description here

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

Ответы [ 2 ]

0 голосов
/ 24 января 2020

$PSScriptRoot, используемый в 64-битных логах c - это то, что я хотел.

Текущий скрипт обновления базы данных выглядит следующим образом:

# 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 production database..."
echo "PSScriptRoot: $PSScriptRoot"
sqlcmd.exe -S vhs-sql1 -d JobManager -i "$PSScriptRoot\..\database\upgrade.sql"
# Test if the sqlcmd.exe command exited with a success or error condition
if ($LastExitCode -ne 0)
{
    throw "sqlcmd.exe failed to run, exiting with the code $LastExitCode"
}
echo "Production database upgrade complete."

Обратите внимание на обновленный файл sqlcmd.exe линия

0 голосов
/ 22 января 2020

Просто сохраните ваш скрипт в root вашего источника и укажите следующее:

version: 0.0
os: windows
files:
  - source: \index.html
    destination: c:\inetpub\wwwroot
hooks:
  BeforeInstall:
    - location: \before-install.bat        # <====== script in source dir root
      timeout: 900

Подробности здесь:

[1] Шаг 2. Настройте исходный контент для развертывания на Windows сервер Amazon EC2 Instance - добавьте файл спецификации приложения - https://docs.aws.amazon.com/codedeploy/latest/userguide/tutorials-windows-configure-content.html#tutorials - windows -configure-content-add-appspe c -file

...