From 9b4b0d22d8b4297a936047d7b540f8ea8d721f09 Mon Sep 17 00:00:00 2001 From: Aleksandr Chebotov Date: Thu, 2 Jul 2020 17:05:38 +0300 Subject: [PATCH] slack notification --- .../send-slack-notification.ps1 | 63 +++++++++++++++++++ slack-notification/slack.helpers.psm1 | 38 +++++++++++ 2 files changed, 101 insertions(+) create mode 100644 slack-notification/send-slack-notification.ps1 create mode 100644 slack-notification/slack.helpers.psm1 diff --git a/slack-notification/send-slack-notification.ps1 b/slack-notification/send-slack-notification.ps1 new file mode 100644 index 0000000..a465d2d --- /dev/null +++ b/slack-notification/send-slack-notification.ps1 @@ -0,0 +1,63 @@ +<# +.SYNOPSIS +Sending messages using Incoming Webhooks + +.PARAMETER Url +Required parameter. Incoming Webhook URL to post a message +.PARAMETER ToolName +Required parameter. The name of tool +.PARAMETER ToolVersion +Required parameter. Specifies the version of tool +.PARAMETER PipelineUrl +Required parameter. The pipeline URL +.PARAMETER ImageUrl +Optional parameter. The image URL +#> + +param( + [Parameter(Mandatory)] + [ValidateNotNullOrEmpty()] + [System.Uri]$Url, + + [Parameter(Mandatory)] + [ValidateNotNullOrEmpty()] + [System.String]$ToolName, + + [Parameter(Mandatory)] + [ValidateNotNullOrEmpty()] + [System.String]$ToolVersion, + + [Parameter(Mandatory)] + [ValidateNotNullOrEmpty()] + [System.String]$PipelineUrl, + + [System.String]$ImageUrl = 'https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png' +) + +# Import helpers module +Import-Module $PSScriptRoot/slack.helpers.psm1 -DisableNameChecking + +# Create JSON body +$text = "The following versions of '$toolName' are available to upload: $toolVersion\nLink to the pipeline: $pipelineUrl" +$jsonBodyMessage = @" +{ + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "$text" + }, + "accessory": { + "type": "image", + "image_url": "$imageUrl", + "alt_text": "$toolName" + } + } + ] +} +"@ + +# Send Slack message +$null = Send-SlackPostMessageIncomingWebHook -Uri $url -Body $jsonBodyMessage +Write-Host "Message template: `n $jsonBodyMessage" diff --git a/slack-notification/slack.helpers.psm1 b/slack-notification/slack.helpers.psm1 new file mode 100644 index 0000000..208f1c1 --- /dev/null +++ b/slack-notification/slack.helpers.psm1 @@ -0,0 +1,38 @@ +<# +.SYNOPSIS +Sending messages using Incoming Webhooks +https://api.slack.com/messaging/webhooks +#> + +function Send-SlackPostMessageIncomingWebHook +{ + param( + [Parameter(Mandatory)] + [ValidateNotNullOrEmpty()] + [System.Uri]$Uri, + + [Parameter(Mandatory)] + [ValidateNotNullOrEmpty()] + [System.Object]$Body + ) + + try + { + $response = Invoke-RestMethod -Uri $uri -Method POST -Body $body -ErrorAction Stop + if ($response -eq 'ok') + { + return $response + } + else + { + Write-Host "##vso[task.LogIssue type=error;] Something went wrong. Response is '$response'" + } + } + catch + { + Write-Host "##vso[task.LogIssue type=error;] Slack send post message failed: '$_'" + } + + Write-Host "##vso[task.complete result=Failed;]" + exit 1 +} \ No newline at end of file