This is a small post about sending neat slack notifications from Github Actions. If it looks good, you get developers to click on the notification, trust me 😄
Here are the steps:
Github actions
and with a cool github logoIncoming webhooks
, create a webhook, and save the webhook as a Github Actions repository secret with the name SLACK_NOTIFICATIONS_TOKENJohn Doe added an integration to this channel: Github Actions
.github/workflows
to add the following snippet: # [...]
deploy:
name: 'Deployment'
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
# - name: Deploy
# run: deploy.sh
# [...]
- name: notify slack
id: slack
uses: slackapi/slack-github-action@v1.24.0
# https://api.slack.com/apps/<your-app-id>/incoming-webhooks
if: ${{ failure() }}
with:
channel-id: 'F04D4MXFY3R' # slack channel #alerts-test
payload: |
{
"text": "GitHub Action failed",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*Production deployment check failed* :fire_engine:\n High error rate detected after deployment! Rolling back..."
}
},
{
"type": "actions",
"elements": [
{
"type": "button",
"text": {
"type": "plain_text",
"text": ":github: Failed action"
},
"url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
},
{
"type": "button",
"text": {
"type": "plain_text",
"text": ":grafana: Grafana dashboard"
},
"url": "https://<your_organization>.grafana.net/d/my-app-dashboard?from=now-1h&to=now"
}
]
}
]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_NOTIFICATIONS_TOKEN }}
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK
Feel free to customize the "mrkdwn" part as you want, you can learn more about formatting here: https://api.slack.com/reference/surfaces/formatting.
In the buttons, I like to add the failed action that sent the notification, and a link to the production app grafana dashboard.
💡 Note 1: You can notice I use custom slack emojis to ✨beautify✨ the slack message:
github
andgrafana
. Check this link on how to add custom emojis if you don't know yet: https://slack.com/help/articles/206870177-Add-custom-emoji-and-aliases-to-your-workspace You can go to https://slackmojis.com/ to find the Github and the Grafana ones.
💡 Note 2: You can use
if: ${{ failure() }}
on the step level to only send the notification when the previous step (the deployment) failed :D