0.0
Repository is archived
No commit activity in last 3 years
No release in over 3 years
Execute deployments swiftly and safely using `rake promote`
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

KapostDeploy

Gem Version Code Climate GPA Code Climate Coverage

Table of Contents

  • Features
  • Requirements
  • Configuration Options
  • Setup
  • Tests
  • Versioning
  • Contributions
  • License
  • History
  • Credits

Features

KapostDeploy::Task.define creates the following rake tasks to aid in the pipeline promotion deployment of Heroku applications

[promote]
  Promotes a source environment to production

[promote:before_promote]
  Executes application-defined before promotion code as defined in task config (See below)

[promote:after_promote]
  Executes application-defined after promotion code as defined in task config (See below)

Simple Example:

require "kapost_deploy/task"

KapostDeploy::Task.define do |config|
  config.app = "cabbage-staging"
  config.to = "cabbage-production"
  config.pipeline = "cabbage"
  config.heroku_api_token = "123"

  config.after do
    puts "It's Miller time"
  end
end

A slightly more complex example which will create 6 rake tasks: stage:before_stage, stage, stage:after_stage, promote:before_promote, promote, promote:after_promote

require "kapost_deploy/task"
require "kapost_deploy/plugins/slack_after_promote"
require "kapost_deploy/plugins/slack_github_diff"
require "kapost_deploy/plugins/db_migrate"

CONFIG = {
  slack_config: {
    webhook_url: "https://hooks.slack.com/services/34326/FDSJFH127/68357sdhfjhHSJGFNMDngsd",
    channel: "#danger",
    icon_url: "http://yourcompany.s3.amazonaws.com/logo.png"
  },
  git_config: {
    github_repo: "yourcompany/widget"
  }
}.freeze

KapostDeploy::Task.define(:stage) do |config|
  config.app = "cabbage-staging"
  config.to = "cabbage-sandbox"
  config.pipeline = "cabbage"
  config.heroku_api_token = "123"

  config.options = CONFIG

  config.after do
    sleep 60*2 wait for dynos to restart
    slack.notify "The eagle has landed. [Go validate](https://testbed.sandbox.com/dashboard)!"
    Launchy.open("https://testbed.sandbox.com/dashboard")
  end

  config.add_plugin(KapostDeploy::Plugins::DbMigrate)
end

KapostDeploy::Task.define do |config|
  config.app = "cabbage-sandboxc"
  config.to = "cabbage-production"
  config.pipeline = "cabbage"
  config.heroku_api_token = "123"

  config.options = CONFIG

  config.before do
    puts "Are you sure you did x, y, and z? yes/no: "
    confirm = gets.strip
    exit(1) unless confirm.downcase == "yes"
  end

  config.add_plugin(KapostDeploy::Plugins::SlackGithubDiff)
  config.add_plugin(KapostDeploy::Plugins::DbMigrate)
  config.add_plugin(KapostDeploy::Plugins::SlackAfterPromote)
end

Requirements

  1. MRI 2.3.0
  2. Heroku Toolbelt installed

Configuration Options

  • pipeline: The application pipeline to promote
  • heroku_api_token: Your platform api token. You can retrieve this using heroku auth:token
  • app: The application to be promoted
  • to: The downstream application(s) to receive the promotion. For multiple environments, use an array.
  • options: An options hash containing plugin options:
    • git_config: If using github plugins, an options hash containing the following keys:
      • github_repo: The owner/repo string, such as kapost/kapost_deploy
    • slack_config: If using slack plugins, an options hash containing the following keys:
      • webhook_url: The webhook URL you added to your slack integrations
      • username: The apparent username of the notifier defaults to "webhooks bot"
      • channel: The channel name to post the notification to defaults to "#general"
      • icon_url: A URL for the icon image optional
      • icon_emoji: Emoji name to use instead of an icon optional

Setup

To install, type the following:

gem install kapost_deploy

Add the following to your Gemfile:

gem "kapost_deploy"

Tests

To test, run:

bundle exec rake

Versioning

Read Semantic Versioning for details. Briefly, it means:

  • Patch (x.y.Z) - Incremented for small, backwards compatible bug fixes.
  • Minor (x.Y.z) - Incremented for new, backwards compatible public API enhancements and/or bug fixes.
  • Major (X.y.z) - Incremented for any backwards incompatible public API changes.

Contributions

Fork the project. Make your feature addition or bug fix. Do not bump the version number. Send me a pull request. Bonus points for topic branches.

License

MIT

Copyright (c) 2016 Kapost.

History

Read the CHANGELOG for details. Built with Gemsmith.

Credits

Developed by Brandon Croft at brandon@kapost.com.