Octopus.Script exported 2019-10-18 by rikrak belongs to ‘Entity Framework’ category.
Runs Update-Database to update the database to the latest Entity Framework migrations
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Path to EF Tools folder
EfToolsFolder
Please provide a full path to a folder where Migrate.exe (along with other EF files are contained, available from EF nuget package) on Tentacle
Base Directory
BaseDirectory = /bin
Path to where your application files are located. For ASP.NET applications this would be /bin
Site Path
NugetPackageStepName
Name of the previously-deployed package step that contains the applications files
Config File Name
configFileName = web.config
Name of your applications config file. For ASP.NET applications this would be web.config, for Windows Service applications this would be yourapplication.dll.config and for console applications this would be yourapplication.exe.config
Name of Assembly file with EF-Context
AssemblyDllName
Please provide a name of the assembly file where EF-context is stored
ConnectionStringName
ConnectionStringName
Name of the key in
Script body
Steps based on this template will execute the following PowerShell script.
# A collection of functions that can be used by script steps to determine where packages installed
# by previous steps are located on the filesystem.
function Find-InstallLocations {
$result = @()
$OctopusParameters.Keys | foreach {
if ($_.EndsWith('].Output.Package.InstallationDirectoryPath')) {
$result += $OctopusParameters[$_]
}
}
return $result
}
function Find-InstallLocation($stepName) {
$result = $OctopusParameters.Keys | where {
$_.Equals("Octopus.Action[$stepName].Output.Package.InstallationDirectoryPath", [System.StringComparison]::OrdinalIgnoreCase)
} | select -first 1
if ($result) {
return $OctopusParameters[$result]
}
throw "No install location found for step: $stepName"
}
function Find-SingleInstallLocation {
$all = @(Find-InstallLocations)
if ($all.Length -eq 1) {
return $all[0]
}
if ($all.Length -eq 0) {
throw "No package steps found"
}
throw "Multiple package steps have run; please specify a single step"
}
function Test-LastExit($cmd) {
if ($LastExitCode -ne 0) {
Write-Host "##octopus[stderr-error]"
write-error "$cmd failed with exit code: $LastExitCode"
}
}
$stepName = $OctopusParameters['NugetPackageStepName']
$stepPath = ""
if (-not [string]::IsNullOrEmpty($stepName)) {
Write-Host "Finding path to package step: $stepName"
$stepPath = Find-InstallLocation $stepName
} else {
$stepPath = Find-SingleInstallLocation
}
Write-Host "Package was installed to: $stepPath"
$baseDirectory = $OctopusParameters['BaseDirectory']
$binPath = Join-Path $stepPath $baseDirectory
#Locate Migrate.exe
$efToolsFolder = $OctopusParameters['EfToolsFolder']
$originalMigrateExe = Join-Path $efToolsFolder "migrate.exe"
if (-Not(Test-Path $originalMigrateExe)){
throw ("Unable to locate migrate.exe file. Specifed path $originalMigrateExe does not exist.")
}
Write-Host("Found Migrate.Exe from $originalMigrateExe")
$migrateExe = Join-Path $binPath "migrate.exe"
if (-Not(Test-Path $migrateExe)) {
# Move migrate.exe to ASP.NET Project's bin folder as per https://msdn.microsoft.com/de-de/data/jj618307.aspx?f=255&MSPPError=-2147217396
Copy-Item $originalMigrateExe -Destination $binPath
Write-Host("Copied $originalMigrateExe into $binPath")
}
#Locate Assembly with DbContext class
$contextDllName = $OctopusParameters['AssemblyDllName']
$contextDllPath = Join-Path $binPath $contextDllName
if (-Not(Test-Path $contextDllPath)){
throw ("Unable to locate assembly file with DbContext class. Specifed path $contextDllPath does not exist.")
}
Write-Host("Using $contextDllName from $contextDllPath")
#Locate web.config. Migrate.exe needs it for some reason, even if connection string is provided
$configFile = $OctopusParameters['ConfigFileName']
$configPath = Join-Path $stepPath $configFile
if (-Not(Test-Path $configPath)){
throw ("Unable to locate config file. Specifed path $webConfigPath does not exist.")
}
$connectionStringName = $OctopusParameters['ConnectionStringName']
$migrateCommand = "& ""$migrateExe"" ""$contextDllName"" /connectionStringName=""$connectionStringName"" /startupConfigurationFile=""$configPath"" /startUpDirectory=""$binPath"" /Verbose"
Write-Host "##octopus[stderr-error]" # Stderr is an error
Write-Host "Executing: " $migrateCommand
Write-Host
Invoke-Expression $migrateCommand | Write-Host
# Remove migrate.exe from the bin folder as it is not part of the application
If (Test-Path $migrateExe)
{
Write-Host "Deleting " $migrateExe
Remove-Item $migrateExe
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "a6cd35d6-164a-4e57-a0f8-0d327129783a",
"Name": "Run Entity Framework migrations (Update-Database)",
"Description": "Runs `Update-Database` to update the database to the latest Entity Framework migrations",
"Version": 6,
"ExportedAt": "2019-10-18T09:11:34.909Z",
"ActionType": "Octopus.Script",
"Author": "rikrak",
"Parameters": [
{
"Name": "EfToolsFolder",
"Label": "Path to EF Tools folder",
"HelpText": "Please provide a full path to a folder where Migrate.exe (along with other EF files are contained, available from EF nuget package) on Tentacle",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "BaseDirectory",
"Label": "Base Directory",
"HelpText": "Path to where your application files are located. For ASP.NET applications this would be `/bin`",
"DefaultValue": "/bin",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "NugetPackageStepName",
"Label": "Site Path",
"HelpText": "Name of the previously-deployed package step that contains the applications files",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "StepName"
}
},
{
"Name": "configFileName",
"Label": "Config File Name",
"HelpText": "Name of your applications config file. For ASP.NET applications this would be `web.config`, for Windows Service applications this would be `yourapplication.dll.config` and for console applications this would be `yourapplication.exe.config`",
"DefaultValue": "web.config",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "AssemblyDllName",
"Label": "Name of Assembly file with EF-Context",
"HelpText": "Please provide a name of the assembly file where EF-context is stored",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Name": "ConnectionStringName",
"Label": "ConnectionStringName",
"HelpText": "Name of the key in <connectionStrings> section in Web.Config",
"DefaultValue": null,
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"Octopus.Action.Script.ScriptBody": "# A collection of functions that can be used by script steps to determine where packages installed\n# by previous steps are located on the filesystem.\n \nfunction Find-InstallLocations {\n $result = @()\n $OctopusParameters.Keys | foreach {\n if ($_.EndsWith('].Output.Package.InstallationDirectoryPath')) {\n $result += $OctopusParameters[$_]\n }\n }\n return $result\n}\n \nfunction Find-InstallLocation($stepName) {\n $result = $OctopusParameters.Keys | where {\n $_.Equals(\"Octopus.Action[$stepName].Output.Package.InstallationDirectoryPath\", [System.StringComparison]::OrdinalIgnoreCase)\n } | select -first 1\n \n if ($result) {\n return $OctopusParameters[$result]\n }\n \n throw \"No install location found for step: $stepName\"\n}\n \nfunction Find-SingleInstallLocation {\n $all = @(Find-InstallLocations)\n if ($all.Length -eq 1) {\n return $all[0]\n }\n if ($all.Length -eq 0) {\n throw \"No package steps found\"\n }\n throw \"Multiple package steps have run; please specify a single step\"\n}\n\nfunction Test-LastExit($cmd) {\n if ($LastExitCode -ne 0) {\n Write-Host \"##octopus[stderr-error]\"\n write-error \"$cmd failed with exit code: $LastExitCode\"\n }\n}\n\n\n\n\n$stepName = $OctopusParameters['NugetPackageStepName']\n\n$stepPath = \"\"\nif (-not [string]::IsNullOrEmpty($stepName)) {\n Write-Host \"Finding path to package step: $stepName\"\n $stepPath = Find-InstallLocation $stepName\n} else {\n $stepPath = Find-SingleInstallLocation\n}\nWrite-Host \"Package was installed to: $stepPath\"\n\n$baseDirectory = $OctopusParameters['BaseDirectory']\n\n$binPath = Join-Path $stepPath $baseDirectory\n\n#Locate Migrate.exe\n$efToolsFolder = $OctopusParameters['EfToolsFolder']\n$originalMigrateExe = Join-Path $efToolsFolder \"migrate.exe\"\n\nif (-Not(Test-Path $originalMigrateExe)){\n throw (\"Unable to locate migrate.exe file. Specifed path $originalMigrateExe does not exist.\")\n}\nWrite-Host(\"Found Migrate.Exe from $originalMigrateExe\")\n\n$migrateExe = Join-Path $binPath \"migrate.exe\"\nif (-Not(Test-Path $migrateExe)) {\n # Move migrate.exe to ASP.NET Project's bin folder as per https://msdn.microsoft.com/de-de/data/jj618307.aspx?f=255&MSPPError=-2147217396\n Copy-Item $originalMigrateExe -Destination $binPath\n Write-Host(\"Copied $originalMigrateExe into $binPath\")\n}\n\n#Locate Assembly with DbContext class\n$contextDllName = $OctopusParameters['AssemblyDllName']\n$contextDllPath = Join-Path $binPath $contextDllName\nif (-Not(Test-Path $contextDllPath)){\n throw (\"Unable to locate assembly file with DbContext class. Specifed path $contextDllPath does not exist.\")\n}\nWrite-Host(\"Using $contextDllName from $contextDllPath\")\n\n#Locate web.config. Migrate.exe needs it for some reason, even if connection string is provided\n$configFile = $OctopusParameters['ConfigFileName']\n$configPath = Join-Path $stepPath $configFile\nif (-Not(Test-Path $configPath)){\n throw (\"Unable to locate config file. Specifed path $webConfigPath does not exist.\")\n}\n\n$connectionStringName = $OctopusParameters['ConnectionStringName']\n\n$migrateCommand = \"& \"\"$migrateExe\"\" \"\"$contextDllName\"\" /connectionStringName=\"\"$connectionStringName\"\" /startupConfigurationFile=\"\"$configPath\"\" /startUpDirectory=\"\"$binPath\"\" /Verbose\"\n\nWrite-Host \"##octopus[stderr-error]\" # Stderr is an error\nWrite-Host \"Executing: \" $migrateCommand\nWrite-Host \n\nInvoke-Expression $migrateCommand | Write-Host\n\n# Remove migrate.exe from the bin folder as it is not part of the application\nIf (Test-Path $migrateExe)\n{\n Write-Host \"Deleting \" $migrateExe\n Remove-Item $migrateExe\n}\n",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline"
},
"Category": "Entity Framework",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/a381802920158308/step-templates/run-entity-framework-migrations.json",
"Website": "/step-templates/a6cd35d6-164a-4e57-a0f8-0d327129783a",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Friday, October 18, 2019