SQL Server __DeployLog: Update
Octopus.Script exported 10/02/2020 by Alex-Yates belongs to 'dlm' category.
To be used with: SQL Server __DeployLog: Read
Requires sqlserver PowerShell module on target machine.
For more information: https://octopus.com/blog/100x-faster-db-deploys
Parameters
When steps based on the template are included in a project's deployment process, the parameters below can be set.
Database package deployment step (Required)
The step that deploys the package containing the database source code to the target machine.
Database update step (Required)
The step that updates the target database.
Target SQL Server Instance (Required)
The name of the target SQL Server instance. e.g. SQLSERVER01\myInstance
Target SQL Server Database (Required)
The name of the target database.
SQL Auth User (Optional)
The SQL Auth user used to authenticate against the target database. (For Windows Auth, leave blank.)
SQL Auth Password (Optional)
The SQL Auth password used to authenticate against the target database. (For Windows Auth, leave blank.)
Script body
<#
Required variables:
$DLM_PackageStep
$DLM_DeployStep
$DLM_ServerInstance
$DLM_Database
Optional variables (include for SQL Auth, exclude for WinAuth):
$DLM_Username
$DLM_Password
#>
$errorActionPreference = "stop"
# Verifying that sqlserver module is installed
If (-not(Get-InstalledModule sqlserver -ErrorAction silentlycontinue)) {
Write-Error "This step requires the sqlserver PowerShell module. Please install it and try again."
}
Else {
Write-Output "PowerShell module sqlserver is already installed."
}
# Declaring variabes
$deployed_by = ([Environment]::UserDomainName + "\" + [Environment]::UserName)
$currentPackageVersion = $OctopusParameters["Octopus.Action[$DLM_PackageStep].Package.PackageVersion"]
$octo_release_number = $OctopusParameters["Octopus.Release.Number"]
$octo_deployment_id = $OctopusParameters["Octopus.Deployment.Id"]
$octo_deployment_created_by = $OctopusParameters["Octopus.Deployment.CreatedBy.Username"]
$deployStatusCode = $OctopusParameters["Octopus.Step[$DLM_DeployStep].Status.Code"]
$deployStatusError = $OctopusParameters["Octopus.Step[$DLM_DeployStep].Status.Error"]
$deployStatusErrorDetail = $OctopusParameters["Octopus.Step[$DLM_DeployStep].Status.ErrorDetail"]
$timestamp = Get-Date
$utcTime = [datetime]::Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss")
# Escaping single quotes to avoid breaking T-SQL INSERT statements
$deployStatusError = $deployStatusError -replace "'", "''"
$deployStatusErrorDetail = $deployStatusErrorDetail -replace "'", "''"
# Logging input variables
Write-Verbose "DLM_PackageStep step is: $DLM_PackageStep"
Write-Verbose "DLM_DeployStep step is: $DLM_DeployStep"
Write-Verbose "DLM_ServerInstance instance is: $DLM_ServerInstance"
Write-Verbose "DLM_Database is: $DLM_Database"
Write-Verbose "DLM_Username is: $DLM_Username"
Write-Verbose "deployed_by is: $deployed_by"
Write-Verbose "currentPackageVersion is: $currentPackageVersion"
Write-Verbose "octo_release_number is: $octo_release_number"
Write-Verbose "octo_deployment_id is: $octo_deployment_id"
Write-Verbose "octo_deployment_created_by is: $octo_deployment_created_by"
Write-Verbose "deployStatusCode is: $deployStatusCode"
Write-Verbose "deployStatusError is: $deployStatusError"
Write-Verbose "deployStatusErrorDetail is: $deployStatusErrorDetail"
Write-Verbose "utcTime is: $utcTime"
# For invoke-sqlcmd authentication
$auth=@{}
if($DLM_Username){$auth=@{UserName=$DLM_Username;Password=$DLM_Password}}
# Script to check whether __DeployLog exists in target database
$CheckDeployLogExists = @'
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = N'__DeployLog')
BEGIN
SELECT 'TRUE'
END
ELSE
BEGIN
SELECT 'FALSE'
End
'@
# Script to create the __DeployLog table if it does not already exist
$CreateDeployLogTbl = @'
CREATE TABLE [dbo].[__DeployLog](
[deploy_id] [int] IDENTITY(1,1) PRIMARY KEY,
[package_version] [varchar](255) NOT NULL,
[octo_release_number] [nvarchar](50) NOT NULL,
[octo_deployment_id] [nvarchar](50) NOT NULL,
[octo_deployment_created_by] [nvarchar](255) NOT NULL,
[utc_time] [datetime2](7) NOT NULL,
[deployed_by] [nvarchar](50) NULL,
[status_code] [nvarchar](50) NULL,
[status_error] [nvarchar](MAX) NULL,
[status_error_detail] [nvarchar](MAX) NULL
)
GO
'@
# Checking if __DeployLog still exists following deployment
# (it may have been dropped if it wasn't included in source code)
$DeployLogExists = Invoke-Sqlcmd -ServerInstance $DLM_ServerInstance -Database $DLM_Database -Query $CheckDeployLogExists @Auth
$DeployLogExists = $DeployLogExists[0]
# If __DeployLog has been dropped, recreate it
if($DeployLogExists -eq "FALSE") {
Write-Warning "Table __DeployLog does not exist in $DLM_Database on $DLM_ServerInstance post-deployment. It may have been deleted. You should either add the table to your source code or your filter to avoid data loss."
Write-Output "Redeploying __DeployLog table"
Invoke-Sqlcmd -ServerInstance $DLM_ServerInstance -Database $DLM_Database -Query $CreateDeployLogTbl @Auth
}
# Script to update __DeployLog with info about this deployment
$updateDeployLog = @"
INSERT INTO [dbo].[__DeployLog]
([package_version]
,[octo_release_number]
,[octo_deployment_id]
,[octo_deployment_created_by]
,[utc_time]
,[deployed_by]
,[status_code]
,[status_error]
,[status_error_detail])
VALUES
('$currentPackageVersion'
,'$octo_release_number'
,'$octo_deployment_id'
,'$octo_deployment_created_by'
,'$utcTime'
,'$deployed_by'
,'$deployStatusCode'
,'$deployStatusError'
,'$deployStatusErrorDetail')
GO
"@
Write-Output "Updating __DeployLog in $DLM_Database on $DLM_ServerInstance."
Invoke-Sqlcmd -ServerInstance $DLM_ServerInstance -Database $DLM_Database -Query $updateDeployLog @AuthTo use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
Show JSON{
"Id": "a9f7644c-3e27-4e46-a591-eee7f3542032",
"Name": "SQL Server __DeployLog: Update",
"Description": "To be used with:\nSQL Server __DeployLog: Read\r\n\r\nRequires sqlserver PowerShell module on target machine.\r\n\r\nFor more information: https://octopus.com/blog/100x-faster-db-deploys",
"Version": 2,
"ExportedAt": "2020-10-02T14:46:20.483Z",
"ActionType": "Octopus.Script",
"Author": "Alex-Yates",
"Packages": [],
"Parameters": [
{
"Id": "a2328977-2df7-42bb-9f23-263031f27fe7",
"Name": "DLM_PackageStep",
"Label": "Database package deployment step (Required)",
"HelpText": "The step that deploys the package containing the database source code to the target machine.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "StepName"
}
},
{
"Id": "c4668938-09ea-4b42-9be5-61dfcee9eae6",
"Name": "DLM_DeployStep",
"Label": "Database update step (Required)",
"HelpText": "The step that updates the target database.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "StepName"
}
},
{
"Id": "871c40e6-9435-4cc5-8f52-a54eaf8c71ad",
"Name": "DLM_ServerInstance",
"Label": "Target SQL Server Instance (Required)",
"HelpText": "The name of the target SQL Server instance.\ne.g. SQLSERVER01\\myInstance",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "553359a5-9ee8-43a8-b6fc-aa7e5f9d9d9e",
"Name": "DLM_Database",
"Label": "Target SQL Server Database (Required)",
"HelpText": "The name of the target database.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "61f123b1-cb7d-423f-bf3e-da979c3aa539",
"Name": "DLM_Username",
"Label": "SQL Auth User (Optional)",
"HelpText": "The SQL Auth user used to authenticate against the target database. (For Windows Auth, leave blank.)",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "b373aa81-7807-4653-928b-acf39f6a4888",
"Name": "DLM_Password",
"Label": "SQL Auth Password (Optional)",
"HelpText": "The SQL Auth password used to authenticate against the target database. (For Windows Auth, leave blank.)",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "Sensitive"
}
}
],
"Properties": {
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptBody": "<#\nRequired variables:\n$DLM_PackageStep\n$DLM_DeployStep\n$DLM_ServerInstance\n$DLM_Database\n\nOptional variables (include for SQL Auth, exclude for WinAuth):\n$DLM_Username\n$DLM_Password\n#>\n\n$errorActionPreference = \"stop\"\n\n# Verifying that sqlserver module is installed\nIf (-not(Get-InstalledModule sqlserver -ErrorAction silentlycontinue)) {\n Write-Error \"This step requires the sqlserver PowerShell module. Please install it and try again.\"\n}\nElse {\n Write-Output \"PowerShell module sqlserver is already installed.\"\n}\n\n# Declaring variabes\n$deployed_by = ([Environment]::UserDomainName + \"\\\" + [Environment]::UserName)\n$currentPackageVersion = $OctopusParameters[\"Octopus.Action[$DLM_PackageStep].Package.PackageVersion\"]\n$octo_release_number = $OctopusParameters[\"Octopus.Release.Number\"]\n$octo_deployment_id = $OctopusParameters[\"Octopus.Deployment.Id\"]\n$octo_deployment_created_by = $OctopusParameters[\"Octopus.Deployment.CreatedBy.Username\"]\n$deployStatusCode = $OctopusParameters[\"Octopus.Step[$DLM_DeployStep].Status.Code\"]\n$deployStatusError = $OctopusParameters[\"Octopus.Step[$DLM_DeployStep].Status.Error\"]\n$deployStatusErrorDetail = $OctopusParameters[\"Octopus.Step[$DLM_DeployStep].Status.ErrorDetail\"]\n$timestamp = Get-Date\n$utcTime = [datetime]::Now.ToUniversalTime().ToString(\"yyyy-MM-dd HH:mm:ss\")\n\n# Escaping single quotes to avoid breaking T-SQL INSERT statements\n$deployStatusError = $deployStatusError -replace \"'\", \"''\"\n$deployStatusErrorDetail = $deployStatusErrorDetail -replace \"'\", \"''\"\n\n# Logging input variables\nWrite-Verbose \"DLM_PackageStep step is: $DLM_PackageStep\"\nWrite-Verbose \"DLM_DeployStep step is: $DLM_DeployStep\"\nWrite-Verbose \"DLM_ServerInstance instance is: $DLM_ServerInstance\"\nWrite-Verbose \"DLM_Database is: $DLM_Database\"\nWrite-Verbose \"DLM_Username is: $DLM_Username\"\nWrite-Verbose \"deployed_by is: $deployed_by\"\nWrite-Verbose \"currentPackageVersion is: $currentPackageVersion\"\nWrite-Verbose \"octo_release_number is: $octo_release_number\"\nWrite-Verbose \"octo_deployment_id is: $octo_deployment_id\"\nWrite-Verbose \"octo_deployment_created_by is: $octo_deployment_created_by\"\nWrite-Verbose \"deployStatusCode is: $deployStatusCode\"\nWrite-Verbose \"deployStatusError is: $deployStatusError\"\nWrite-Verbose \"deployStatusErrorDetail is: $deployStatusErrorDetail\"\nWrite-Verbose \"utcTime is: $utcTime\"\n\n# For invoke-sqlcmd authentication\n$auth=@{}\nif($DLM_Username){$auth=@{UserName=$DLM_Username;Password=$DLM_Password}}\n\n# Script to check whether __DeployLog exists in target database\n$CheckDeployLogExists = @'\nIF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES\n WHERE TABLE_NAME = N'__DeployLog')\n BEGIN\n SELECT 'TRUE'\n END \nELSE\n BEGIN\n SELECT 'FALSE'\n End\n'@\n\n# Script to create the __DeployLog table if it does not already exist\n$CreateDeployLogTbl = @'\nCREATE TABLE [dbo].[__DeployLog](\n\t[deploy_id] [int] IDENTITY(1,1) PRIMARY KEY,\n\t[package_version] [varchar](255) NOT NULL,\n \t[octo_release_number] [nvarchar](50) NOT NULL,\n \t[octo_deployment_id] [nvarchar](50) NOT NULL,\n [octo_deployment_created_by] [nvarchar](255) NOT NULL,\n\t[utc_time] [datetime2](7) NOT NULL,\n\t[deployed_by] [nvarchar](50) NULL,\n [status_code] [nvarchar](50) NULL,\n [status_error] [nvarchar](MAX) NULL,\n [status_error_detail] [nvarchar](MAX) NULL\n )\nGO\n'@\n\n# Checking if __DeployLog still exists following deployment \n# (it may have been dropped if it wasn't included in source code)\n$DeployLogExists = Invoke-Sqlcmd -ServerInstance $DLM_ServerInstance -Database $DLM_Database -Query $CheckDeployLogExists @Auth\n$DeployLogExists = $DeployLogExists[0]\n\n# If __DeployLog has been dropped, recreate it\nif($DeployLogExists -eq \"FALSE\") {\n Write-Warning \"Table __DeployLog does not exist in $DLM_Database on $DLM_ServerInstance post-deployment. It may have been deleted. You should either add the table to your source code or your filter to avoid data loss.\"\n Write-Output \"Redeploying __DeployLog table\"\n Invoke-Sqlcmd -ServerInstance $DLM_ServerInstance -Database $DLM_Database -Query $CreateDeployLogTbl @Auth\n}\n\n# Script to update __DeployLog with info about this deployment\n$updateDeployLog = @\"\nINSERT INTO [dbo].[__DeployLog]\n ([package_version]\n ,[octo_release_number]\n ,[octo_deployment_id]\n ,[octo_deployment_created_by]\n ,[utc_time]\n ,[deployed_by]\n ,[status_code]\n ,[status_error]\n ,[status_error_detail])\n VALUES\n ('$currentPackageVersion'\n ,'$octo_release_number'\n ,'$octo_deployment_id'\n ,'$octo_deployment_created_by'\n ,'$utcTime'\n ,'$deployed_by'\n ,'$deployStatusCode'\n ,'$deployStatusError'\n ,'$deployStatusErrorDetail')\nGO\n\"@\n\nWrite-Output \"Updating __DeployLog in $DLM_Database on $DLM_ServerInstance.\"\nInvoke-Sqlcmd -ServerInstance $DLM_ServerInstance -Database $DLM_Database -Query $updateDeployLog @Auth"
},
"Category": "dlm",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates/sql-deploylog-update.json",
"Website": "/step-templates/a9f7644c-3e27-4e46-a591-eee7f3542032",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}Provided under the Apache License version 2.0.