/HerokuPipelines4Travis

Deployment to Heroku for Travis CI with app provisioning

Primary LanguageShell

Heroku Pipelines for Travis CI

Initial setup

Create application and configure pipeline on Heroku.

To initiate project follow commands:

npm install herokupipelines4travis lodash --save-dev
$(npm bin)/hp4t setup

Package lodash is optional - install it if you want to use it in infrastructure/.

You can edit files:

  • .travis.yml - Travis CI configuration file
  • infrastructure/ - directory with infrastructure configuration
    • base.js - base configuration
    • stage.js - stage environment configuration
    • production.js - production environment configuration

Convention

For simplify usage you should define:

alias hp4t="$(npm bin)/hp4t"

Setup commands

  • hp4t setup - initialise project
  • hp4t export app_name [heroku_api_key] - export existing Heroku application configration

Commands for Travis CI

  • hp4t init - initialise runtime environment
  • hp4t provision environment_name - provision Heroku app
  • hp4t pipeline - setup Heroku pipeline
  • hp4t deploy app_name - deploy code to Heroku app
  • hp4t run app_name "command with params" - run command on Heroku application (useful for database migration)
  • hp4t promote app_name - promote existing application to next environment
  • hp4t package output-file.tgz - build a tarball (tgz) with dependencies for Npm based projects
  • hp4t deploy-tarball app_name file.tgz - deploy tarball file to a Heroku aplication

Read more

Example Travis configuration file

.travis.yml

---
language: node_js
node_js: stable
env:
  global:
  # ========== Heroku Pipelines for Travis =========
  # HEROKU_API_KEY
  - secure: "..."
  - HP4T_HEROKU_APPNAME_STAGE=hp4t-test-stage
  - HP4T_HEROKU_APPNAME_PRODUCTION=hp4t-test
cache:
  directories:
  - node_modules
install:
- npm install
script:
- npm test
- npm lint
deploy:
  - provider: script
    skip_cleanup: true
    script: make deploy
    on:
      branch: master
after_success:
- hp4t notify-rollbar

Makefile

deploy:
  hp4t init
  hp4t package build.tgz
  hp4t pipeline
  hp4t provision stage
  hp4t deploy-tarball build.tgz ${HP4T_HEROKU_APPNAME_STAGE}
  hp4t run ${HP4T_HEROKU_APPNAME_STAGE} "npm run migrate-database"
  hp4t provision production
  hp4t promote ${HP4T_HEROKU_APPNAME_STAGE}
  hp4t run ${HP4T_HEROKU_APPNAME_PRODUCTION} "npm run migrate-database"

Please remember to use one tab indent in Makefile.