Search code examples
node.jsdockertravis-cigoogle-kubernetes-enginegoogle-container-registry

Implementing a CI/Deployment Pipeline for a Node app


I will shortly be in the process of rewriting a node app with the intention of implementing Continuous Integration and TDD.

I also want to design and set up a deployment pipeline for development, staging, and production.

Currently I'm using Shipit to push changes to different instances that have pre-configured environments. I've heard about deploying Docker containers with the needed environments, and I'd like to learn more about that.

I'm looking at TravisCI and for automated testing/builds, and from my understanding, one can push the Docker image to a registry after the build succeeds.

I'm also learning about scaling, and looking at a design for production that incorporates Google Cloud servers/services serving 3 clustered versions of the node app, a Redis cluster, and 2 PostgreSQL nodes, which each service being behind a load balancer.

I've heard of Kubernetes being used to manage and deploy containerized applications, but I'm curious on how it all fits together.

In my head I think that it would seem like the process would be as follows:

  1. commit changes on dev machine - push to repository.
  2. TravisCI builds and runs tests, (what about migrations and pushing changes to the postgreSQL service?), pushes to a Google Cloud Container Registry.
  3. Log into the Google Container Engine and run the app with Kubernetes.
  4. What about the Redis Cluster? The PostgreSQL nodes?

I apologize in advance if this question is lacking in clarity and knowledge, but I'm trying to learn more before I move along.


Solution

  • Have you considered Google Cloud Container Builder? It's very easy to set up a trigger from your Github repository, which would start a new build on changes (branch or tag).

    As part of the build, you can push the new image to GCR.

    And you could also deploy to Kubernetes as part of the same build.