Slack - Detailed Notification

Octopus.Script exported 2022-09-08 by twerthi belongs to ‘Slack’ category.

Posts deployment status to Slack optionally including additional details (release number, environment name, release notes etc.) as well as error description and link to failure log page.

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Webhook URL

HookUrl

The Webhook URL provided by Slack, including token.

Channel handle

Channel

Which Slack channel to post notifications to.

Icon URL

IconUrl = https://octopus.com/content/resources/favicon.png

The icon to use for this user in Slack

Username = Octopus Deploy

The username shown in Slack against these notifications

Main message

DeploymentInfoText = #{Octopus.Project.Name} release #{Octopus.Release.Number} to #{Octopus.Environment.Name} (#{Octopus.Machine.Name})

Long information message shown in slack. This message is prefixed with “Deployed successfully” or “Failed to deploy” depending on status.

Include release number field

IncludeFieldRelease = false

Shows short field with release number name

Include release notes Field

IncludeFieldReleaseNotes = false

Release notes are only included on successful deployment

Include machine name field

IncludeFieldMachine = false

Shows short field with machine name

Include environment name field

IncludeFieldEnvironment = false

Shows short field with environment name

Include tenant name field

IncludeFieldTenant = false

Shows short field with name of tenant

Include username field

IncludeFieldUsername = false

Shows the username of user that initiated deployment

IncludeLinkOnFailure = false

When deployment failed a link “Open process page” is added to the notification pointing to deployment process page

Include error message text on failure

IncludeErrorMessageOnFailure = false

When deployment failed error text is shown as part of notification

Octopus base url

OctopusBaseUrl

Base URL to add to the links in the notification. If octopus server dashboard is at “http://octopus/app” include all before the “app” part (“http://octopus”).

Script body

Steps based on this template will execute the following PowerShell script.

function Slack-Populate-StatusInfo ([boolean] $Success = $true) {

	$deployment_info = $OctopusParameters['DeploymentInfoText'];
	
	if ($Success){
		$status_info = @{
			color = "good";
			
			title = "Success";
			message = "$deployment_info";

			fallback = "Deployed successfully $deployment_info";
			
			success = $Success;
		}
	} else {
		$status_info = @{
			color = "danger";
			
			title = "Failed";			
			message = "$deployment_info";

			fallback = "Failed to deploy $deployment_info";	
			
			success = $Success;
		}
	}
	
	return $status_info;
}

function Slack-Populate-Fields ($StatusInfo) {

	# We use += instead of .Add() to prevent returning values returned by .Add() function
	# it clutters the code, but seems the easiest solution here
	
	$fields = @()
	
	$fields += 
		@{
			title = $StatusInfo.title;
			value = $StatusInfo.message;
		}
	;

	$IncludeFieldEnvironment = [boolean]::Parse($OctopusParameters['IncludeFieldEnvironment'])
	if ($IncludeFieldEnvironment) {
		$fields += 
			@{
				title = "Environment";
				value = $OctopusEnvironmentName;
				short = "true";
			}
		;	
	}


	$IncludeFieldMachine = [boolean]::Parse($OctopusParameters['IncludeFieldMachine'])
	if ($IncludeFieldMachine) {
		$fields += 
			@{
				title = "Machine";
				value = $OctopusParameters['Octopus.Machine.Name'];
				short = "true";
			}
		;	
	}	
	
	$IncludeFieldTenant = [boolean]::Parse($OctopusParameters['IncludeFieldTenant'])
	if ($IncludeFieldTenant) {
		$fields += 
			@{
				title = "Tenant";
				value = $OctopusParameters['Octopus.Deployment.Tenant.Name'];
				short = "true";
			}
		;	
	}	
	
		$IncludeFieldUsername = [boolean]::Parse($OctopusParameters['IncludeFieldUsername'])
	if ($IncludeFieldUsername) {
		$fields += 
			@{
				title = "Username";
				value = $OctopusParameters['Octopus.Deployment.CreatedBy.Username'];
				short = "true";
			}
		;	
	}	
	
	$IncludeFieldRelease = [boolean]::Parse($OctopusParameters['IncludeFieldRelease'])
	if ($IncludeFieldRelease) {
		$fields += 
			@{
				title = "Release";
				value = $OctopusReleaseNumber;
				short = "true";
			}
		;	
	}
	
	
	$IncludeFieldReleaseNotes = [boolean]::Parse($OctopusParameters['IncludeFieldReleaseNotes'])
	if ($StatusInfo["success"] -and $IncludeFieldReleaseNotes) {
	
		
		$link = $OctopusParameters['Octopus.Web.ReleaseLink'];
		$baseurl = $OctopusParameters['OctopusBaseUrl'];
		
		$notes = $OctopusReleaseNotes
		
		if ($notes.Length -gt 300) {
			$shortened = $OctopusReleaseNotes.Substring(0,0);
			$notes = "$shortened `n `<${baseurl}${link}|view all changes`>"
		}
		
		$fields +=  
			@{
				title = "Changes in this release";
				value = $notes;
			}
		;	
	}	
	
	#failure fields
	
	$IncludeErrorMessageOnFailure = [boolean]::Parse($OctopusParameters['IncludeErrorMessageOnFailure'])
	if (-not  $StatusInfo["success"] -and $IncludeErrorMessageOnFailure) {
			
		$fields += 
			@{
				title = "Error text";
				value = $OctopusParameters['Octopus.Deployment.Error'];
			}
		;	
	}	
		

	$IncludeLinkOnFailure = [boolean]::Parse($OctopusParameters['IncludeLinkOnFailure'])
	if (-not $StatusInfo["success"] -and $IncludeLinkOnFailure) {
		
		$link = $OctopusParameters['Octopus.Web.DeploymentLink'];
		$baseurl = $OctopusParameters['OctopusBaseUrl'];
	
		$fields += 
			@{
				title = "See the process";
				value = "`<${baseurl}${link}|Open process page`>";
				short = "true";
			}
		;	
	}
	
	
	return $fields;
	
}

function Slack-Rich-Notification ($Success)
{
    $status_info = Slack-Populate-StatusInfo -Success $Success
	$fields = Slack-Populate-Fields -StatusInfo $status_info

	
	$payload = @{
        channel = $OctopusParameters['Channel']
        username = $OctopusParameters['Username'];
        icon_url = $OctopusParameters['IconUrl'];
		
        attachments = @(
            @{
				fallback = $status_info["fallback"];
				color = $status_info["color"];
			
				fields = $fields
            };
        );
    }
	
	#We unescape here to allow links in the Json, as ConvertTo-Json escapes <,> and other special symbols
	$json_body = ($payload | ConvertTo-Json -Depth 4 | % { [System.Text.RegularExpressions.Regex]::Unescape($_) });
	
	
    try {
    	$invokeParameters = @{}
        $invokeParameters.Add("Method", "POST")
        $invokeParameters.Add("Body", $json_body)
        $invokeParameters.Add("Uri", $OctopusParameters['HookUrl'])
        $invokeParameters.Add("ContentType", "application/json")
        
            # Check for UseBasicParsing
        if ((Get-Command Invoke-RestMethod).Parameters.ContainsKey("UseBasicParsing"))
        {
            # Add the basic parsing argument
            $invokeParameters.Add("UseBasicParsing", $true)
        }

        
        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
        Invoke-RestMethod @invokeParameters
        
    } catch {
        echo "Something occured"
        echo  $_.Exception
        echo  $_
        #echo $json_body
        throw
    }
    
}



$success = ($OctopusParameters['Octopus.Deployment.Error'] -eq $null);

Slack-Rich-Notification -Success $success

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "07d64408-ac47-490e-ade2-01bab607ed4f",
  "Name": "Slack - Detailed Notification",
  "Description": "Posts deployment status to Slack optionally including additional details (release number, environment name, release notes etc.) as well as error description and link to failure log page.",
  "Version": 10,
  "ExportedAt": "2022-09-08T18:00:57.940Z",
  "ActionType": "Octopus.Script",
  "Author": "twerthi",
  "Parameters": [
    {
      "Id": "635cd97f-f3aa-48a5-a165-839650921931",
      "Name": "HookUrl",
      "Label": "Webhook URL",
      "HelpText": "The Webhook URL provided by Slack, including token.",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      },
      "Links": {}
    },
    {
      "Id": "14f5203e-4ce2-4ea2-ae25-379ef538e18b",
      "Name": "Channel",
      "Label": "Channel handle",
      "HelpText": "Which Slack channel to post notifications to.",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      },
      "Links": {}
    },
    {
      "Id": "1ab73186-ab66-4be6-818f-f53a39f3f962",
      "Name": "IconUrl",
      "Label": "Icon URL",
      "HelpText": "The icon to use for this user in Slack",
      "DefaultValue": "https://octopus.com/content/resources/favicon.png",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      },
      "Links": {}
    },
    {
      "Id": "a746df23-8cd6-4084-8aea-3713b68b6ec5",
      "Name": "Username",
      "Label": "",
      "HelpText": "The username shown in Slack against these notifications",
      "DefaultValue": "Octopus Deploy",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      },
      "Links": {}
    },
    {
      "Id": "b4918796-8fed-4074-bd3b-f84b555d1015",
      "Name": "DeploymentInfoText",
      "Label": "Main message",
      "HelpText": "Long information message shown in slack. This message is prefixed with \"Deployed successfully\" or \"Failed to deploy\" depending on status.",
      "DefaultValue": "#{Octopus.Project.Name} release #{Octopus.Release.Number} to #{Octopus.Environment.Name} (#{Octopus.Machine.Name})",
      "DisplaySettings": {
        "Octopus.ControlType": "MultiLineText"
      },
      "Links": {}
    },
    {
      "Id": "60e51e4a-2741-4a36-aaf2-e040c19929d9",
      "Name": "IncludeFieldRelease",
      "Label": "Include release number field",
      "HelpText": "Shows short field with release number name",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "6b383bdb-10b4-4e8b-bf8a-d4c257b0731b",
      "Name": "IncludeFieldReleaseNotes",
      "Label": "Include release notes Field",
      "HelpText": "Release notes are only included on successful deployment",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "df788f61-b026-47da-8a0d-d79e8e48ea4c",
      "Name": "IncludeFieldMachine",
      "Label": "Include machine name field",
      "HelpText": "Shows short field with machine name",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "7a88c0ce-9bd0-4ad3-af76-1d71c1d4f6e4",
      "Name": "IncludeFieldEnvironment",
      "Label": "Include environment name field",
      "HelpText": "Shows short field with environment name",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "f25651aa-920c-4894-b2c6-a4a4c1c6a44d",
      "Name": "IncludeFieldTenant",
      "Label": "Include tenant name field",
      "HelpText": "Shows short field with name of tenant",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "a929f109-b4ae-40f0-b5e5-b15c448ff672",
      "Name": "IncludeFieldUsername",
      "Label": "Include username field",
      "HelpText": "Shows the username of user that initiated deployment",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "3bbe0522-ef27-4793-b249-c87242c818fb",
      "Name": "IncludeLinkOnFailure",
      "Label": "Include deployment process link on failure",
      "HelpText": "When deployment failed a link \"Open process page\" is added to the notification pointing to deployment process page",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "d68b3d72-2944-4f57-bcb9-a96b388c5d0d",
      "Name": "IncludeErrorMessageOnFailure",
      "Label": "Include error message text on failure",
      "HelpText": "When deployment failed error text is shown as part of notification",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      },
      "Links": {}
    },
    {
      "Id": "9672e4ab-fe66-4351-bf9b-78cac354d7b6",
      "Name": "OctopusBaseUrl",
      "Label": "Octopus base url",
      "HelpText": "Base URL to add to the links in the notification. If octopus server dashboard is at \"http://octopus/app\" include all before the \"app\" part (\"http://octopus\").",
      "DefaultValue": null,
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      },
      "Links": {}
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptBody": "function Slack-Populate-StatusInfo ([boolean] $Success = $true) {\n\n\t$deployment_info = $OctopusParameters['DeploymentInfoText'];\n\t\n\tif ($Success){\n\t\t$status_info = @{\n\t\t\tcolor = \"good\";\n\t\t\t\n\t\t\ttitle = \"Success\";\n\t\t\tmessage = \"$deployment_info\";\n\n\t\t\tfallback = \"Deployed successfully $deployment_info\";\n\t\t\t\n\t\t\tsuccess = $Success;\n\t\t}\n\t} else {\n\t\t$status_info = @{\n\t\t\tcolor = \"danger\";\n\t\t\t\n\t\t\ttitle = \"Failed\";\t\t\t\n\t\t\tmessage = \"$deployment_info\";\n\n\t\t\tfallback = \"Failed to deploy $deployment_info\";\t\n\t\t\t\n\t\t\tsuccess = $Success;\n\t\t}\n\t}\n\t\n\treturn $status_info;\n}\n\nfunction Slack-Populate-Fields ($StatusInfo) {\n\n\t# We use += instead of .Add() to prevent returning values returned by .Add() function\n\t# it clutters the code, but seems the easiest solution here\n\t\n\t$fields = @()\n\t\n\t$fields += \n\t\t@{\n\t\t\ttitle = $StatusInfo.title;\n\t\t\tvalue = $StatusInfo.message;\n\t\t}\n\t;\n\n\t$IncludeFieldEnvironment = [boolean]::Parse($OctopusParameters['IncludeFieldEnvironment'])\n\tif ($IncludeFieldEnvironment) {\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"Environment\";\n\t\t\t\tvalue = $OctopusEnvironmentName;\n\t\t\t\tshort = \"true\";\n\t\t\t}\n\t\t;\t\n\t}\n\n\n\t$IncludeFieldMachine = [boolean]::Parse($OctopusParameters['IncludeFieldMachine'])\n\tif ($IncludeFieldMachine) {\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"Machine\";\n\t\t\t\tvalue = $OctopusParameters['Octopus.Machine.Name'];\n\t\t\t\tshort = \"true\";\n\t\t\t}\n\t\t;\t\n\t}\t\n\t\n\t$IncludeFieldTenant = [boolean]::Parse($OctopusParameters['IncludeFieldTenant'])\n\tif ($IncludeFieldTenant) {\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"Tenant\";\n\t\t\t\tvalue = $OctopusParameters['Octopus.Deployment.Tenant.Name'];\n\t\t\t\tshort = \"true\";\n\t\t\t}\n\t\t;\t\n\t}\t\n\t\n\t\t$IncludeFieldUsername = [boolean]::Parse($OctopusParameters['IncludeFieldUsername'])\n\tif ($IncludeFieldUsername) {\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"Username\";\n\t\t\t\tvalue = $OctopusParameters['Octopus.Deployment.CreatedBy.Username'];\n\t\t\t\tshort = \"true\";\n\t\t\t}\n\t\t;\t\n\t}\t\n\t\n\t$IncludeFieldRelease = [boolean]::Parse($OctopusParameters['IncludeFieldRelease'])\n\tif ($IncludeFieldRelease) {\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"Release\";\n\t\t\t\tvalue = $OctopusReleaseNumber;\n\t\t\t\tshort = \"true\";\n\t\t\t}\n\t\t;\t\n\t}\n\t\n\t\n\t$IncludeFieldReleaseNotes = [boolean]::Parse($OctopusParameters['IncludeFieldReleaseNotes'])\n\tif ($StatusInfo[\"success\"] -and $IncludeFieldReleaseNotes) {\n\t\n\t\t\n\t\t$link = $OctopusParameters['Octopus.Web.ReleaseLink'];\n\t\t$baseurl = $OctopusParameters['OctopusBaseUrl'];\n\t\t\n\t\t$notes = $OctopusReleaseNotes\n\t\t\n\t\tif ($notes.Length -gt 300) {\n\t\t\t$shortened = $OctopusReleaseNotes.Substring(0,0);\n\t\t\t$notes = \"$shortened `n `<${baseurl}${link}|view all changes`>\"\n\t\t}\n\t\t\n\t\t$fields +=  \n\t\t\t@{\n\t\t\t\ttitle = \"Changes in this release\";\n\t\t\t\tvalue = $notes;\n\t\t\t}\n\t\t;\t\n\t}\t\n\t\n\t#failure fields\n\t\n\t$IncludeErrorMessageOnFailure = [boolean]::Parse($OctopusParameters['IncludeErrorMessageOnFailure'])\n\tif (-not  $StatusInfo[\"success\"] -and $IncludeErrorMessageOnFailure) {\n\t\t\t\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"Error text\";\n\t\t\t\tvalue = $OctopusParameters['Octopus.Deployment.Error'];\n\t\t\t}\n\t\t;\t\n\t}\t\n\t\t\n\n\t$IncludeLinkOnFailure = [boolean]::Parse($OctopusParameters['IncludeLinkOnFailure'])\n\tif (-not $StatusInfo[\"success\"] -and $IncludeLinkOnFailure) {\n\t\t\n\t\t$link = $OctopusParameters['Octopus.Web.DeploymentLink'];\n\t\t$baseurl = $OctopusParameters['OctopusBaseUrl'];\n\t\n\t\t$fields += \n\t\t\t@{\n\t\t\t\ttitle = \"See the process\";\n\t\t\t\tvalue = \"`<${baseurl}${link}|Open process page`>\";\n\t\t\t\tshort = \"true\";\n\t\t\t}\n\t\t;\t\n\t}\n\t\n\t\n\treturn $fields;\n\t\n}\n\nfunction Slack-Rich-Notification ($Success)\n{\n    $status_info = Slack-Populate-StatusInfo -Success $Success\n\t$fields = Slack-Populate-Fields -StatusInfo $status_info\n\n\t\n\t$payload = @{\n        channel = $OctopusParameters['Channel']\n        username = $OctopusParameters['Username'];\n        icon_url = $OctopusParameters['IconUrl'];\n\t\t\n        attachments = @(\n            @{\n\t\t\t\tfallback = $status_info[\"fallback\"];\n\t\t\t\tcolor = $status_info[\"color\"];\n\t\t\t\n\t\t\t\tfields = $fields\n            };\n        );\n    }\n\t\n\t#We unescape here to allow links in the Json, as ConvertTo-Json escapes <,> and other special symbols\n\t$json_body = ($payload | ConvertTo-Json -Depth 4 | % { [System.Text.RegularExpressions.Regex]::Unescape($_) });\n\t\n\t\n    try {\n    \t$invokeParameters = @{}\n        $invokeParameters.Add(\"Method\", \"POST\")\n        $invokeParameters.Add(\"Body\", $json_body)\n        $invokeParameters.Add(\"Uri\", $OctopusParameters['HookUrl'])\n        $invokeParameters.Add(\"ContentType\", \"application/json\")\n        \n            # Check for UseBasicParsing\n        if ((Get-Command Invoke-RestMethod).Parameters.ContainsKey(\"UseBasicParsing\"))\n        {\n            # Add the basic parsing argument\n            $invokeParameters.Add(\"UseBasicParsing\", $true)\n        }\n\n        \n        [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12\n        Invoke-RestMethod @invokeParameters\n        \n    } catch {\n        echo \"Something occured\"\n        echo  $_.Exception\n        echo  $_\n        #echo $json_body\n        throw\n    }\n    \n}\n\n\n\n$success = ($OctopusParameters['Octopus.Deployment.Error'] -eq $null);\n\nSlack-Rich-Notification -Success $success\n",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.RunOnServer": "false",
    "Octopus.Action.Script.ScriptFileName": null,
    "Octopus.Action.Package.FeedId": null,
    "Octopus.Action.Package.PackageId": null
  },
  "Category": "Slack",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/slack-detailed-notification.json",
  "Website": "/step-templates/07d64408-ac47-490e-ade2-01bab607ed4f",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Thursday, September 8, 2022