Slack - Detailed Notification - Bash

Octopus.Script exported 2022-07-19 by TristanUnibuddy 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 project field

IncludeFieldProject = True

null

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 Bash script.

# Get values into variables
includeFieldProject=$(get_octopusvariable "IncludeFieldProject")
includeFieldEnvironment=$(get_octopusvariable "IncludeFieldEnvironment")
includeFieldMachine=$(get_octopusvariable "includeFieldMachine")
includeFieldTenant=$(get_octopusvariable "IncludeFieldTenant")
includeFieldUsername=$(get_octopusvariable "IncludeFieldUsername")
includeFieldRelease=$(get_octopusvariable "IncludeFieldRelease")
includeFieldReleaseNotes=$(get_octopusvariable "IncludeFieldReleaseNotes")
includeFieldErrorMessageOnFailure=$(get_octopusvariable "IncludeErrorMessageOnFailure")
includeFieldLinkOnFailure=$(get_octopusvariable "IncludeLinkOnFailure")

function convert_ToBoolean () {
	local stringValue=$1
    local returnValue=""

    if [[ "$stringValue" == "True" ]]
    then
    	returnValue=true
    else
    	returnValue=false
    fi
    
    echo "$returnValue"
}

function slack_Populate_StatusInfo (){
    	local success=$1
    	local deployment_info=$(get_octopusvariable "DeploymentInfoText")
		local jsonBody="{ "
		
        if [[ "$success" == true ]]
        then
        	jsonBody+='"color": "good",'
            jsonBody+='"title": "Success",'
            jsonBody+='"fallback": "Deployed successfully '
            jsonBody+="$deployment_info\""
        else
        	jsonBody+='"color": "danger",'
            jsonBody+='"title": "Failed",'
            jsonBody+='"fallback": "Failed to deploy '
            jsonBody+="$deployment_info\""
        fi
        
        #jsonBody+="}"
        
        echo $jsonBody
}

function populate_field () {
	local title=$1
    local value=$2
    local body=""
    
    body+='{'
    body+='"short": "true",'
    body+='"title": '
    body+="\"$title\""
    body+=","
    body+='"value": '
    body+="\"$value\""
    body+='}'
    
    echo "$body"
}


function slack_Populate_Fields (){
	local status_info=$1
    local fieldsJsonBody=""
    declare -a testArray
    
   if [[ "$includeFieldProject" == true ]]
   then
    testArray+=("$(populate_field "Project" "$(get_octopusvariable "Octopus.Project.Name")")")
   fi
    
   if [[ "$includeFieldEnvironment" == true ]]
   then
    testArray+=("$(populate_field "Environment" "$(get_octopusvariable "Octopus.Environment.Name")")")
   fi
   
   if [[ "$includeFieldMachine" == true ]]
   then
    testArray+=("$(populate_field "Machine" "$(get_octopusvariable "Octopus.Machine.Name")")")
   fi
      
   if [[ "$includeFieldTenant" == true ]]
   then
    testArray+=("$(populate_field "Tenant" "$(get_octopusvariable "Octopus.Deployment.Tenant.Name")")")
   fi
   
   if [[ "$includeFieldUsername" == true ]]
   then
    testArray+=("$(populate_field "Username" "$(get_octopusvariable "Octopus.Deployment.CreatedBy.Username")")")
   fi
   
   if [[ "$includeFieldRelease" == true ]]
   then
    testArray+=("$(populate_field "Release" "$(get_octopusvariable "Octopus.Release.Number")")")
   fi
   
   if [[ "$includeFieldReleaseNotes" == true ]]
   then
    testArray+=("$(populate_field "Changes in this release" "$(get_octopusvariable "Octopus.Release.Notes")")")
   fi
      
   if [[ "$status_info" == false ]]
   then
     if [[ "$includeFieldErrorMessageOnFailure" == true ]]
     then
      testArray+=("$(populate_field "Error text" "$(get_octopusvariable "Octopus.Deployment.Error")")")
     fi

     if [[ "$includeFieldLinkOnFailure" == true ]]
     then
      baseUrl="$(get_octopusvariable "Octopus.Web.ServerUri")"
      testArray+=("$(populate_field "See the process" "$baseUrl$(get_octopusvariable "Octopus.Web.DeploymentLink")")")
     fi
   fi
   
   
   ( IFS=$','; echo "${testArray[*]}" )   
   
}

function slack_rich_notification () {
	local success=$1
    local jsonBody="{ "
    
    jsonBody+='"channel": '
    jsonBody+="\"$(get_octopusvariable "Channel")\","
    jsonBody+='"username": '
    jsonBody+="\"$(get_octopusvariable "Username")\","
    jsonBody+='"icon_url": '
    jsonBody+="\"$(get_octopusvariable "IconUrl")\","
    jsonBody+='"attachments": ['
    jsonBody+=$(slack_Populate_StatusInfo "$success")
    jsonBody+=',"fields": '
    jsonBody+="[$(slack_Populate_Fields "$success")]"
    jsonBody+="}]}"
    
    echo "$jsonBody"
}

# Convert include* variables to actual boolean values
includeFieldProject=$(convert_ToBoolean "$includeFieldProject")
includeFieldEnvironment=$(convert_ToBoolean "$includeFieldEnvironment")
includeFieldMachine=$(convert_ToBoolean "$includeFieldMachine")
includeFieldTenant=$(convert_ToBoolean "$includeFieldTenant")
includeFieldUsername=$(convert_ToBoolean "$includeFieldUsername")
includeFieldRelease=$(convert_ToBoolean "$includeFieldRelease")
includeFieldReleaseNotes=$(convert_ToBoolean "$includeFieldReleaseNotes")
includeFieldErrorMessageOnFailure=$(convert_ToBoolean "$includeFieldErrorMessageOnFailure")
includeFieldLinkOnFailure=$(convert_ToBoolean "$includeFieldLinkOnFailure")

success=true

if [[ ! -z $(get_octopusvariable "Octopus.Deployment.Error") ]]
then
	success=false
fi

# Build json payload
json_payload=$(slack_rich_notification $success)

webook_url=$(get_octopusvariable "HookUrl")

# Send webhook - redirect stderr to stdout
wget --post-data="$json_payload" --secure-protocol="auto" "$webook_url" 2>&1

# Check for error
if [[ $? -ne 0 ]]
then
    fail_step "Failed!"
fi


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": "cd3b6172-ed9a-4c42-a588-4c78c3e3b08a",
  "Name": "Slack - Detailed Notification - Bash",
  "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": 4,
  "ExportedAt": "2022-07-19T08:54:06.595Z",
  "ActionType": "Octopus.Script",
  "Author": "TristanUnibuddy",
  "Packages": [],
  "Parameters": [
    {
      "Id": "d9109767-c4a0-44d4-9501-bdd82be0f935",
      "Name": "HookUrl",
      "Label": "Webhook URL",
      "HelpText": "The Webhook URL provided by Slack, including token.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "Sensitive"
      }
    },
    {
      "Id": "d0a459eb-4a63-48e2-8a81-a03540eb1576",
      "Name": "Channel",
      "Label": "Channel handle",
      "HelpText": "Which Slack channel to post notifications to.",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "706ba5da-6c0f-487f-9ac2-90c32fd04a84",
      "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"
      }
    },
    {
      "Id": "53a41383-6e54-42ba-ad91-d85c28651299",
      "Name": "Username",
      "Label": "",
      "HelpText": "The username shown in Slack against these notifications",
      "DefaultValue": "Octopus Deploy",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Id": "1f5c2164-f4a5-485b-adb0-2714eea6cff8",
      "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"
      }
    },
    {
      "Id": "3538eb46-3c2f-4f81-aad1-434da1e2c30b",
      "Name": "IncludeFieldRelease",
      "Label": "Include release number field",
      "HelpText": "Shows short field with release number name",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "57985f0b-6bf6-4b41-aaf8-f8a6ce65547b",
      "Name": "IncludeFieldReleaseNotes",
      "Label": "Include release notes Field",
      "HelpText": "Release notes are only included on successful deployment",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "97309be1-e7cb-43ab-9721-13ceab6bf7ca",
      "Name": "IncludeFieldMachine",
      "Label": "Include machine name field",
      "HelpText": "Shows short field with machine name",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "b0415f67-00e5-4568-b099-0f107d5e54ae",
      "Name": "IncludeFieldProject",
      "Label": "Include project field",
      "HelpText": null,
      "DefaultValue": "True",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "29772dc0-ddd2-4406-932b-e09e87d3d1c6",
      "Name": "IncludeFieldEnvironment",
      "Label": "Include environment name field",
      "HelpText": "Shows short field with environment name",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "ee313203-4485-4320-b27b-03562724352a",
      "Name": "IncludeFieldTenant",
      "Label": "Include tenant name field",
      "HelpText": "Shows short field with name of tenant",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "0f113c63-9a5c-493d-8942-3db978b41240",
      "Name": "IncludeFieldUsername",
      "Label": "Include username field",
      "HelpText": "Shows the username of user that initiated deployment",
      "DefaultValue": "false",
      "DisplaySettings": {
        "Octopus.ControlType": "Checkbox"
      }
    },
    {
      "Id": "0cdec31d-400b-4615-b91a-4f2a5b640b45",
      "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"
      }
    },
    {
      "Id": "51fc4209-a97a-4868-8f27-c1076350b581",
      "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"
      }
    },
    {
      "Id": "d33e02de-a949-472f-a1f4-447425507e6b",
      "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": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptBody": "# Get values into variables\nincludeFieldProject=$(get_octopusvariable \"IncludeFieldProject\")\nincludeFieldEnvironment=$(get_octopusvariable \"IncludeFieldEnvironment\")\nincludeFieldMachine=$(get_octopusvariable \"includeFieldMachine\")\nincludeFieldTenant=$(get_octopusvariable \"IncludeFieldTenant\")\nincludeFieldUsername=$(get_octopusvariable \"IncludeFieldUsername\")\nincludeFieldRelease=$(get_octopusvariable \"IncludeFieldRelease\")\nincludeFieldReleaseNotes=$(get_octopusvariable \"IncludeFieldReleaseNotes\")\nincludeFieldErrorMessageOnFailure=$(get_octopusvariable \"IncludeErrorMessageOnFailure\")\nincludeFieldLinkOnFailure=$(get_octopusvariable \"IncludeLinkOnFailure\")\n\nfunction convert_ToBoolean () {\n\tlocal stringValue=$1\n    local returnValue=\"\"\n\n    if [[ \"$stringValue\" == \"True\" ]]\n    then\n    \treturnValue=true\n    else\n    \treturnValue=false\n    fi\n    \n    echo \"$returnValue\"\n}\n\nfunction slack_Populate_StatusInfo (){\n    \tlocal success=$1\n    \tlocal deployment_info=$(get_octopusvariable \"DeploymentInfoText\")\n\t\tlocal jsonBody=\"{ \"\n\t\t\n        if [[ \"$success\" == true ]]\n        then\n        \tjsonBody+='\"color\": \"good\",'\n            jsonBody+='\"title\": \"Success\",'\n            jsonBody+='\"fallback\": \"Deployed successfully '\n            jsonBody+=\"$deployment_info\\\"\"\n        else\n        \tjsonBody+='\"color\": \"danger\",'\n            jsonBody+='\"title\": \"Failed\",'\n            jsonBody+='\"fallback\": \"Failed to deploy '\n            jsonBody+=\"$deployment_info\\\"\"\n        fi\n        \n        #jsonBody+=\"}\"\n        \n        echo $jsonBody\n}\n\nfunction populate_field () {\n\tlocal title=$1\n    local value=$2\n    local body=\"\"\n    \n    body+='{'\n    body+='\"short\": \"true\",'\n    body+='\"title\": '\n    body+=\"\\\"$title\\\"\"\n    body+=\",\"\n    body+='\"value\": '\n    body+=\"\\\"$value\\\"\"\n    body+='}'\n    \n    echo \"$body\"\n}\n\n\nfunction slack_Populate_Fields (){\n\tlocal status_info=$1\n    local fieldsJsonBody=\"\"\n    declare -a testArray\n    \n   if [[ \"$includeFieldProject\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Project\" \"$(get_octopusvariable \"Octopus.Project.Name\")\")\")\n   fi\n    \n   if [[ \"$includeFieldEnvironment\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Environment\" \"$(get_octopusvariable \"Octopus.Environment.Name\")\")\")\n   fi\n   \n   if [[ \"$includeFieldMachine\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Machine\" \"$(get_octopusvariable \"Octopus.Machine.Name\")\")\")\n   fi\n      \n   if [[ \"$includeFieldTenant\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Tenant\" \"$(get_octopusvariable \"Octopus.Deployment.Tenant.Name\")\")\")\n   fi\n   \n   if [[ \"$includeFieldUsername\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Username\" \"$(get_octopusvariable \"Octopus.Deployment.CreatedBy.Username\")\")\")\n   fi\n   \n   if [[ \"$includeFieldRelease\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Release\" \"$(get_octopusvariable \"Octopus.Release.Number\")\")\")\n   fi\n   \n   if [[ \"$includeFieldReleaseNotes\" == true ]]\n   then\n    testArray+=(\"$(populate_field \"Changes in this release\" \"$(get_octopusvariable \"Octopus.Release.Notes\")\")\")\n   fi\n      \n   if [[ \"$status_info\" == false ]]\n   then\n     if [[ \"$includeFieldErrorMessageOnFailure\" == true ]]\n     then\n      testArray+=(\"$(populate_field \"Error text\" \"$(get_octopusvariable \"Octopus.Deployment.Error\")\")\")\n     fi\n\n     if [[ \"$includeFieldLinkOnFailure\" == true ]]\n     then\n      baseUrl=\"$(get_octopusvariable \"Octopus.Web.ServerUri\")\"\n      testArray+=(\"$(populate_field \"See the process\" \"$baseUrl$(get_octopusvariable \"Octopus.Web.DeploymentLink\")\")\")\n     fi\n   fi\n   \n   \n   ( IFS=$','; echo \"${testArray[*]}\" )   \n   \n}\n\nfunction slack_rich_notification () {\n\tlocal success=$1\n    local jsonBody=\"{ \"\n    \n    jsonBody+='\"channel\": '\n    jsonBody+=\"\\\"$(get_octopusvariable \"Channel\")\\\",\"\n    jsonBody+='\"username\": '\n    jsonBody+=\"\\\"$(get_octopusvariable \"Username\")\\\",\"\n    jsonBody+='\"icon_url\": '\n    jsonBody+=\"\\\"$(get_octopusvariable \"IconUrl\")\\\",\"\n    jsonBody+='\"attachments\": ['\n    jsonBody+=$(slack_Populate_StatusInfo \"$success\")\n    jsonBody+=',\"fields\": '\n    jsonBody+=\"[$(slack_Populate_Fields \"$success\")]\"\n    jsonBody+=\"}]}\"\n    \n    echo \"$jsonBody\"\n}\n\n# Convert include* variables to actual boolean values\nincludeFieldProject=$(convert_ToBoolean \"$includeFieldProject\")\nincludeFieldEnvironment=$(convert_ToBoolean \"$includeFieldEnvironment\")\nincludeFieldMachine=$(convert_ToBoolean \"$includeFieldMachine\")\nincludeFieldTenant=$(convert_ToBoolean \"$includeFieldTenant\")\nincludeFieldUsername=$(convert_ToBoolean \"$includeFieldUsername\")\nincludeFieldRelease=$(convert_ToBoolean \"$includeFieldRelease\")\nincludeFieldReleaseNotes=$(convert_ToBoolean \"$includeFieldReleaseNotes\")\nincludeFieldErrorMessageOnFailure=$(convert_ToBoolean \"$includeFieldErrorMessageOnFailure\")\nincludeFieldLinkOnFailure=$(convert_ToBoolean \"$includeFieldLinkOnFailure\")\n\nsuccess=true\n\nif [[ ! -z $(get_octopusvariable \"Octopus.Deployment.Error\") ]]\nthen\n\tsuccess=false\nfi\n\n# Build json payload\njson_payload=$(slack_rich_notification $success)\n\nwebook_url=$(get_octopusvariable \"HookUrl\")\n\n# Send webhook - redirect stderr to stdout\nwget --post-data=\"$json_payload\" --secure-protocol=\"auto\" \"$webook_url\" 2>&1\n\n# Check for error\nif [[ $? -ne 0 ]]\nthen\n    fail_step \"Failed!\"\nfi\n\n",
    "Octopus.Action.Script.Syntax": "Bash",
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.RunOnServer": "false"
  },
  "Category": "Slack",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/slack-detailed-notification-bash.json",
  "Website": "/step-templates/cd3b6172-ed9a-4c42-a588-4c78c3e3b08a",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Tuesday, July 19, 2022