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/75443764cd38076d/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