Circle CI is a SaaS tool that easily allows a programmer to add continuous integration to their projects. By writing unit tests in a project, a development team is able to merge and push code several times a day without running into merge conflicts or broken code on production.
After integrating Circle CI with your project and writing unit tests, any push or merge to the master
branch will kick off a few events:
- Circle CI will check for a .yml file describing the machine and what branches to deploy
- A server will be spun up to run your app
- All of your dependencies will be installed on that server
- The app will start running
- Any tests located in your test suite will all be automatically run
- The image of your app will be destroyed on the server and the server itself will be spun down
- If all of your tests passed, your merge or push will be allowed to happen. If one fails you will be notified and the code will not merge into your
master
branch.
This is a really useful approach for developments teams. As each developer integrates their branch into the master branch it enforces unit testing which can prevent a lot of bugs, especially if you have a well written test suite.
In this project we're going to:
- Sync Circle CI to our Github account
- Write a new test
- Have Circle CI run your tests every time you push up a new change to the
master
branch - Automatically push your project to Heroku after a passing build
- Using git, initialize this project to point to a Github directory on your Github account.
- Make an account at Circle CI, using Github as your login.
- Click on the "Projects" tab on the left.
- Click "Setup Project" on Github project you pushed from step 1 of this section.
- Select Linux, 1.0, and Node for the platform and language you want to deploy to.
- In your project folder, make a
circle.yml
file. This will configure how Circle CI will deploy and test your project. Use the following to fill it out, keeping in mind that indentation matters:
deployment:
prod:
branch: master
heroku:
appname: your-heroku-app-name
machine:
node:
version: 8.1.4
- Commit and push this file to your Github repo.
- Now when you make pushes to
master
on your Github account, it will trigger the Circle CI service.
- In your Circle CI user settings, find the option for "Heroku API Key" and paste in your Heroku API key.
- Back in your "Projects" tab, click on the project you setup in the previous step (Sync Circle CI) and click on the gear shaped icon to access its settings.
- Associate a Heroku user with your account. This usually just consists of clicking the teal button of adding yourself as a Deploy User.
- Make sure the 'appname' key in your
circle.yml
file matches the name of your Heroku app exactly.
- We have a couple of basic tests in your repo folder for this exercise. Take a look inside
server.spec.js
. You'll see that it check that a 200 response comes back from your app and that "Hello World" is inside an<h1>
tag. - We'd like to setup another test. You can copy the last test on line 32 and change what it's looking for to be a string that you can define.
- In
/public/index.html
change the text in between the<h2>
tag to match the new string you're testing for in Step 2.
- Open up your Circle CI dashboard so you can see the process in real time in our next step.
- Commit your changes and push them to your repo on Github.
- In your Circle CI dashboard you can watch the process as your container is provisioned, your app is started, tested, and then broken down.
- If your tests pass green, if you missed something and your tests fail, Circle CI will prevent the commit from merging and alert you.
- Your Github account is linked to your Circle CI accoun
- You wrote a new test to check for text on an HTML page served by the Express provided app
- When you push a commit or merge to the
master
branch of your repo, Circle CI runs your tests and lets you know if they passed - Your project gets automatically deployed to Heroku
- Figure out how to deploy to AWS instead of Heroku