Continuous Integration with Travis CI
by John Vincent
Posted on April 5, 2017
Configure Github, Travis and Heroku so that a change to a github repository triggers a Travis CI build which executes Mocha/Chai Unit Tests and if successful, deploys to Heroku
Lets get started.
Install Heroku
If Heroku is not installed, see Heroku Notes for details.
Install Travis CLI
If not already installed, install Travis CI command line interface.
Usually, the following will work
sudo gem install travisbut on OSX, fails due to OSX security feature.
May need to install to /usr/local/bin
Update system
sudo gem update -n /usr/local/binthen install Travis
sudo gem install travis -n /usr/local/binTo update Travis
sudo gem update travisor to remove Travis
sudo gem uninstall travisJoin Travis
From Travis
- Sign-up
Authorize, give lots of privileges
Travis syncs projects
Travis CI
From Github
* Select {github-project} project
* Settings, Integrations & services (left menu)
* Add a Service (mid-right)
* Select Travis CI from dropdown
* Do not add User, Token, Domain
* Add service (green button at bottom)From Travis
* click on `username`(top right)
* Lists github projects
* Sync Account
* Activate {github-project}From Github
* Select {github-project} project
* Settings, Integrations & services
* Travis CI, Edit
* Notice Travis CI entry in WebhooksFor a Node/Express application, or for a React/Node/Express application, edit .travis.yml
language: node_js
node_js: node
cache:
directories:
- node_modulesor, if already done
touch .travis.ymlto force a rebuild.
Git push .travis.yml to master
From Travis CI:
- Select User-name, Accounts (top-right)
- Sync Account (top-right)
- Select {project}
- Travis builds the project, see Job log
- When complete, Restart build appears (mid-right)
Set up continuous deployment
Configure Travis to work with Heroku.
- Push changes to master on GitHub, or merge a pull request into master, our tests will automatically run.
- If our tests pass, TravisCI will deploy to Heroku. If our tests do not pass, it will not deploy.
Setup Travis to Deploy to Heroku
Travis login requires my Github login.
cd {project}
travis loginand provide Github username & password
or, already have setup SSH for Github
cd {project}
travis login --auto-passwordDeploy to Heroku
travis setup heroku"return" to all the questions.
To see the differences
git diffCreate Heroku Application
heroku create {heroku-project}Notice:
* App name: {heroku-project}
* https://{heroku-project}.herokuapp.com/
* https://git.heroku.com/{heroku-project}.gitEdit .travis.yml
deploy:
app: {heroku-project}Git commit changes to master
Test Heroku App
To run the app on Heroku:
https://{heroku-project}.herokuapp.com/Test CI is working
To test the continuous integration
- Change or touch any file
- git commit to master
- verify Travis CI rebuilds the project.
Other
git remote -vshows Github and Heroku repositories.
Heroku Remote branch
If Heroku Remote Repository is wrong, for example:
git remote -v
heroku https://git.heroku.com/{bad-project}.gitLet's fix that:
git remote rm heroku
git remote add heroku https://git.heroku.com/{heroku-project}.gitMongoDB
If require MongoDB at Heroku, must add the following to .travis.yml
services:
- mongodbTravis Build Error
invalid option "--api_key="is caused by bad API key.
The solution is to build a new key.
- Heroku
- Navigate to your Heroku account
- API Key section
- Copy API key
- Go to project root directory
- Run the following
travis encrypt <api-key> -r <github-user>/<repo-name> --add deploy.api_keyNotice that .travis.yml is updated
api_key:
secure:secure: has a new value.
Git submit to master and Travis will rebuild.
Continuous Integration
Heroku
- Add Integration testing to Blogging App
- Add Mongoose to blogging app
- Continuous Integration with Travis CI
- Create SpringBoot App and Deploy to Heroku
- Deploy Node Express App to Heroku using Travis Continuous Integration
- Deploy React App to Heroku using Travis Continuous Integration
- Deploy Static Website to Heroku
- Heroku Notes
- Integrating Mongoose into an Express app
- Integration testing in a Mongoose world
- Tests and CI for Blogging App