Offline Package - Could not load package from

Dear Sir / Madam,

I’ve created an Offline Package and attempted to run in on the target machine. It fails because it is unable to find a file within one of the packages (see below). Am I missing something in the setup. There is very little detail in the help for the offline package drop.

C:\MyCompany\MyProduct\0.0.10>“MYSVR-SQL1.MyProduct.Deployments-6979.cmd”

C:\MyCompany\MyProduct\0.0.10>“C:\Windows\system32\WindowsPowershell\v1.0\Powe
rShell.exe” -ExecutionPolicy Bypass -NoLogo -NoProfile -File “MYSVR-SQL1.MyProduct.Deployments-6979.ps1”
##octopus[stdout-verbose]
Octopus Deploy: Calamari version 3.4.37+Branch.master.Sha.50314019a4a8cd430c3fa2cc346f17e9dd4f7ed7
##octopus[stdout-default]
##octopus[stdout-verbose]

Name Value


PSVersion 4.0

WSManStackVersion 3.0

SerializationVersion 1.1.0.1

CLRVersion 4.0.30319.34014

BuildVersion 6.3.9600.16394

PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}

PSRemotingProtocolVersion 2.2

##octopus[stdout-default]
##octopus[stdout-verbose]
Octopus Deploy: Calamari version 3.4.37+Branch.master.Sha.50314019a4a8cd430c3fa2cc346f17e9dd4f7ed7
##octopus[stdout-default]
Deploying package: C:\MyCompany\MyProduct\0.0.10\Packages\MY.AuditDB.0.0.1.66.nupkg
##octopus[stdout-verbose]
Extracting package to: C:\MyCompany\OctopusTemp\Application\MyVm\MY.AuditDB\0.0.1.66
Extracted 5 files
##octopus[stdout-default]
##octopus[setVariable name=“" value=""]
##octopus[setVariable name="
" value="**”]
##octopus[stdout-verbose]
The package has been installed to: C:\MyCompany\OctopusTemp\Application\MyVm\MY.AuditDB\0.0.1.66
If you would like the package to be installed to an alternative location, please
specify the variable 'Octopus.Action.Package.CustomInstallationDirectory’
Adding journal entry:

##octopus[stdout-verbose]
Octopus Deploy: Calamari version 3.4.37+Branch.master.Sha.50314019a4a8cd430c3fa2cc346f17e9dd4f7ed7
##octopus[stdout-default]
##octopus[stdout-verbose]

Name Value


PSVersion 4.0

WSManStackVersion 3.0

SerializationVersion 1.1.0.1

CLRVersion 4.0.30319.34014

BuildVersion 6.3.9600.16394

PSCompatibleVersions {1.0, 2.0, 3.0, 4.0}

PSRemotingProtocolVersion 2.2

##octopus[stdout-default]
##octopus[stdout-verbose]
Invoke-DacPacUtility called. Parameter values supplied:
##octopus[stdout-default]
##octopus[stdout-verbose]
Dacpac Filename: \MY.AuditDB.dacpac
##octopus[stdout-default]
##octopus[stdout-verbose]
Dacpac Profile:
##octopus[stdout-default]
##octopus[stdout-verbose]
Target server: MYSVR-SQL1\SQLSERVER2014
##octopus[stdout-default]
##octopus[stdout-verbose]
Target database: AuditDB
##octopus[stdout-default]
##octopus[stdout-verbose]
Using integrated security: True
##octopus[stdout-default]
##octopus[stdout-verbose]
Username:
##octopus[stdout-default]
##octopus[stdout-verbose]
Report: False
##octopus[stdout-default]
##octopus[stdout-verbose]
Script: False
##octopus[stdout-default]
##octopus[stdout-verbose]
Deploy: True
##octopus[stdout-default]
##octopus[stdout-verbose]
Extract target database dacpac False
##octopus[stdout-default]
##octopus[stdout-verbose]
Deployment contributors:
##octopus[stdout-default]
##octopus[stdout-verbose]
Deployment contributor arguments:
##octopus[stdout-default]
##octopus[stdout-verbose]
Loading the DacFX Assemblies
##octopus[stdout-default]
##octopus[stdout-verbose]
Searching for: Microsoft.SqlServer.TransactSql.ScriptDom.dll
##octopus[stdout-default]
##octopus[stdout-verbose]
Searching: C:\Program Files\Microsoft SQL Server
##octopus[stdout-default]
##octopus[stdout-verbose]
Searching: C:\Program Files (x86)\Microsoft SQL Server
##octopus[stdout-default]
##octopus[stdout-verbose]
Found: C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.
SqlServer.TransactSql.ScriptDom.dll
##octopus[stdout-default]
##octopus[stdout-verbose]
Searching for: Microsoft.SqlServer.Dac.dll
##octopus[stdout-default]
##octopus[stdout-verbose]
Searching: C:\Program Files\Microsoft SQL Server
##octopus[stdout-default]
Deployment failed: Exception calling “Load” with “1” argument(s): "Could not load package from’\MY.AuditDB.dacpac’."
Reason: Could not load package from ‘\MY.AuditDB.dacpac’.
At C:\MyCompany\MyProduct\0.0.10\Scripts\SQL - Deploy AuditDB DACPAC.ps1:35
2 char:3

  •     Throw ("Deployment failed: {0} `r`nReason: {1}" -f $_.Exception.Message, $_.Ex ...
    
  • CategoryInfo : OperationStopped: (Deployment fail…SAudit.dacpac’.:String) [], RuntimeException
  • FullyQualifiedErrorId : Deployment failed: Exception calling “Load” with “1” argument(s): "Could not load package from ‘\MY.AuditDB.dacpac’."
    Reason: Could not load package from ‘\MY.AuditDB.dacpac’.

##octopus[stdout-verbose]
Searching: C:\Program Files (x86)\Microsoft SQL Server##octopus[stdout-default]
##octopus[stdout-verbose]
Found: C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\Microsoft.SqlServer.Dac.dll
##octopus[stdout-default]
##octopus[stdout-verbose]
Adding the type: C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies\Microsoft.SqlServer.TransactSql.ScriptDom.dll
##octopus[stdout-default]
##octopus[stdout-verbose]
Adding the type: C:\Program Files (x86)\Microsoft SQL Server\120\DAC\bin\Microsoft.SqlServer.Dac.dll
##octopus[stdout-default]
Loaded the DAC assemblies

Hi Colin,

Thanks for getting in touch! From the logs, I’m guessing you have two deployment steps. The first unpacks a nupkg that contains a database backup. The second step is a script that attempts to restore the backup, but can’t find it.

It looks like the first step’s package is extracted to C:\MyCompany\OctopusTemp\Application\MyVm\MY.AuditDB\0.0.1.66, however the second step is looking for it in C:\MyCompany\MyProduct\0.0.10\Scripts or \MY.AuditDB.dacpac. Note the leading \ in the second path.

One way to solve this is to combine the steps and put a PostDeploy.ps1 into the nupkg, which will get run after the package is extracted in the same directory as the extracted files.

Another solution would be to set the Octopus.Action.Package.CustomInstallationDirectory variable to the same value for both steps. You could use the Octopus.Release.Number variable within that variable to ensure a unique directory.

Note that using the Octopus.Action[_name_].Output.Package.InstallationDirectoryPath to reference the first step’s directory from the second step will not work as offline deployments do not share variables between steps.

If this does not help, please send me some details of how the steps are configured, their variables and what you are trying to achieve.

Hope that helps!

Robert W

Great! Thank you.