Slack Notifications#

Semaphore has integrated, Slack-based chat notifications that you can set up to be delivered when a pipeline succeeds or fails.

Setting up Slack notifications for a project#

To set up a Slack notification, first you need to configure an incoming webhook in your Slack workspace.

Note: To be able to use full power of Semaphore's integration with Slack, always use Incoming Webhooks app instead of creating your own on Slack. If you set up a notification with an endpoint from your custom Slack app, you won't be able to use the channel override feature.

Use the generated Endpoint URL to set up a notification on Semaphore with the following command:

$ sem create notification [name] \
    --projects [project_name] \
    --slack-endpoint [slack-webhook-endpoint]

For example, if you have a project called web and you want to get a Slack notification for every finished pipeline on the master branch, use the following command:

$ sem create notification master-pipelines \
    --projects web \
    --branches master \
    --slack-endpoint [slack-webhook-endpoint]

Setting up Slack notifications for multiple projects and channels#

When creating a notification, you can specify multiple projects as sources and multiple slack channels as targets of your notifications.

For example, if your team manages three projects named web, cli, and api and you want to get notified for every finished pipeline on the master branch, use the following command:

$ sem create notifications teamA-notifications \
    --projects "web,cli,api" \
    --branches "master" \
    --slack-endpoint [slack-webhook-endpoint]

If you also want to send these notifications to multiple slack channels, for example #dev-team and #qa-team, use the following command:

$ sem create notifications new-releases \
    --projects "web,cli,api" \
    --branches "master" \
    --slack-endpoint [slack-webhook-endpoint] \
    --slack-channels "#dev-team,#qa-team"

Filtering by project, branch, and pipeline name#

When creating a notification, you can specify filters for project, branch, and pipeline names.

For example, to send notifications for the master and staging branches, use the following command:

$ sem create notifications example \
    --branches "master,staging" \
    --slack-endpoint [slack-webhook-endpoint] \

The branch filter can be a direct match like in the previous example, or a regular expression match. For example, to get notified for master and every branch that matches hotfix/-, use the following command:

$ sem create notifications example \
    --branches "master,/hotfix\/.*/" \
    --slack-endpoint [slack-webhook-endpoint] \

Regex matches must be wrapped in forward slashes (e.g. /.*/). Specifying a branch name without slashes (e.g. .*) will execute a direct equality match.

Matching can be specified for project and pipeline names as well. For example, if you want to get notified for every notification on a project that matches /.*-api$/ on the master branch when the prod.yml pipeline is executed, use the following command:

$ sem create notifications example \
    --projects "/.*api$/" \
    --branches "master" \
    --pipelines "prod.yml" \
    --slack-endpoint [slack-webhook-endpoint] \

Advanced notification setup#

In the previous examples, we looked at simple use cases that used the CLI interface to set up a new notification.

For more complex use cases, defining a notification YAML resource offers full control over the rules used for dispatching notifications.

Filtering by pipeline result#

You can specify notifications to be sent only for specific pipeline results.

Available values for the results filter are:

  • passed
  • failed
  • stopped
  • canceled

Example YAML configuration:

# notify-on-fail.yml

apiVersion: v1alpha
kind: Notification
metadata:
  name: notify-on-fail
spec:
  rules:
    - name: "Example"
      filter:
        projects:
          - example-project
        results:
          - failed
      notify:
        slack:
          endpoint: https://hooks.slack.com/services/xxx/yyy/zzz

Note that you can list more than one value under results.

You can create a notification using the file above with the following command:

sem create -f notify-on-fail.yml

Example of notifying multiple teams#

In this example, we want to do the following:

  • For every passed pipeline on the staging branch, notify the QA team
  • For every pipeline on the master branch, notify the DevOps and Security teams

First, specify the notification in a YAML file:

# release-cycle-notifications.yml

apiVersion: v1alpha
kind: Notification
metadata:
  name: release-cycle-notifications
spec:
  rules:
    - name: "On staging branches"
      filter:
        projects:
          - /.*/
        branches:
          - staging
        results:
          - passed
      notify:
        slack:
          endpoint: https://hooks.slack.com/XXXXXXXXXXX/YYYYYYYYYYYY/ZZZZZZZZZZ
          channels:
            - "#qa-team"

    - name: "On master branches"
      filter:
        projects:
          - /.*/
        branches:
          - master
      notify:
        slack:
          endpoint: https://hooks.slack.com/XXXXXXXXXXX/YYYYYYYYYYYY/ZZZZZZZZZZ
          channels:
            - "#devops-team"
            - "#secops-team"

Then, apply the resource to your organization:

sem create -f release-cycle-notifications.yml

Modifying notification settings#

Notification settings can be listed, described, edited, and deleted within your organization, using the sem command line tool.

  • List notifications with: sem get notifications
  • Describe a notification with: sem get notifications [name]
  • Edit a notification with: sem edit notification [name]
  • Delete a notification with: sem delete notification [name]

See the sem command line tool reference documentation for further details on using the sem CLI.

Setting up, editing, and deleting Slack notifications via the UI#

In the Configuration section of the sidebar, click on Notifications -> Create New Notification. Add the name of the notification and its rules, then click on the Save Changes button.

If you’d like to edit or delete an existing notification, click on the name of the notification and, in the top right corner, click on the Edit or Delete... button and follow the steps from there.

See also#