Code Monkey home page Code Monkey logo

slackistrano's Introduction

Slackistrano

Gem Version Code Climate Build Status

Send notifications to Slack about Capistrano deployments.

Requirements

  • Capistrano >= 3.8.1
  • Ruby >= 2.0
  • A Slack account

Installation

  1. Add this line to your application's Gemfile:

    gem 'slackistrano'
  2. Execute:

    $ bundle
    
  3. Require the library in your application's Capfile:

    require 'slackistrano/capistrano'

Configuration

You have two options to notify a channel in Slack when you deploy:

  1. Using Incoming WebHooks integration, offering more options but requires one of the five free integrations. This option provides more messaging flexibility.
  2. Using Slackbot, which will not use one of the five free integrations.

Incoming Webhook

  1. Configure your Slack's Incoming Webhook.

  2. Add the following to config/deploy.rb:

    set :slackistrano, {
      channel: '#your-channel',
      webhook: 'your-incoming-webhook-url'
    }

Slackbot

  1. Configure your Slack's Slackbot (not Bot).

  2. Add the following to config/deploy.rb:

    set :slackistrano, {
      channel: '#your-channel',
      team: 'your-team-name',
      token: 'your-token'
    }

Test your Configuration

Test your setup by running the following command. This will post each stage's message to Slack in turn.

$ cap production slack:deploy:test

Usage

Deploy your application like normal and you should see messages in the channel you specified.

Customizing the Messaging

You can customize the messaging posted to Slack by providing your own messaging class and overriding several methods. Here is one example:

module Slackistrano
  class CustomMessaging < Messaging::Base

    # Send failed message to #ops. Send all other messages to default channels.
    # The #ops channel must exist prior.
    def channels_for(action)
      if action == :failed
        "#ops"
      else
        super
      end
    end

    # Suppress updating message.
    def payload_for_updating
      nil
    end

    # Suppress reverting message.
    def payload_for_reverting
      nil
    end

    # Fancy updated message.
    # See https://api.slack.com/docs/message-attachments
    def payload_for_updated
      {
        attachments: [{
          color: 'good',
          title: 'Integrations Application Deployed :boom::bangbang:',
          fields: [{
            title: 'Environment',
            value: stage,
            short: true
          }, {
            title: 'Branch',
            value: branch,
            short: true
          }, {
            title: 'Deployer',
            value: deployer,
            short: true
          }, {
            title: 'Time',
            value: elapsed_time,
            short: true
          }],
          fallback: super[:text]
        }]
      }
    end

    # Default reverted message.  Alternatively simply do not redefine this
    # method.
    def payload_for_reverted
      super
    end

    # Slightly tweaked failed message.
    # See https://api.slack.com/docs/message-formatting
    def payload_for_failed
      payload = super
      payload[:text] = "OMG :fire: #{payload[:text]}"
      payload
    end

    # Override the deployer helper to pull the full name from the password file.
    # See https://github.com/phallstrom/slackistrano/blob/master/lib/slackistrano/messaging/helpers.rb
    def deployer
      Etc.getpwnam(ENV['USER']).gecos
    end
  end
end

The output would look like this: Custom Messaging

To set this up:

  1. Add the above class to your app, for example lib/custom_messaging.rb.

  2. Require the library after the requiring of Slackistrano in your application's Capfile.

    require_relative 'lib/custom_messaging'
  3. Update the slackistrano configuration in config/deploy.rb and add the klass option.

    set :slackistrano, {
      klass: Slackistrano::CustomMessaging,
      channel: '#your-channel',
      webhook: 'your-incoming-webhook-url'
    }
  4. If you come up with something that you think others would enjoy submit it as an issue along with a screenshot of the output from cap production slack:deploy:test and I'll add it to the Wiki.

Disabling posting to Slack

You can disable deployment notifications to a specific stage by setting the :slackistrano configuration variable to false instead of actual settings.

set :slackistrano, false

TODO

  • Notify about incorrect configuration settings.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

slackistrano's People

Contributors

phallstrom avatar r3trofitted avatar udzura avatar andrusha avatar btsuhako avatar jdowning avatar jameslafa avatar tjwallace avatar ryanmacg avatar ivanovaleksey avatar afrojas avatar fernandocarletti avatar imgarylai avatar opti avatar johnpray avatar snyff avatar mvoto avatar osaris avatar rsutphin avatar seankibler avatar soullivaneuh avatar

Watchers

James Cloos avatar Max Freundlich avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.