2

In our small startup (6 developers) and we use Google Kubernetes Engine + CircleCi (which deploys docker images to K8S with simple bash scripts). We have ~10 services, but we are growing. We use a simplified git-flow model. W plan to use in the future: terraform for infrastructure, helm charts for managing deployments. We want to have a possibility:

  1. (now) to track our releases in every environment
  2. (now) manually rollback / automatically rollback after seeing some alerts in grafana. Rollback must apply Django migrations first and then use the image from the previous deployment.
  3. (now) release a set of services in one go
  4. (future) use some more advanced development techniques like canary deployment
  5. (future) have some metrics regarding deployments (eg. build time)

There are plenty of tools which could be used for this job and it's hard to choose

  1. Spinnaker -> it is said that it needs 3 engineers to maintain it, so probably it's too complex.
  2. Jenkins -> it's more CI/CD tool.
  3. Harness/Argo/Google Deployment/Team City/Code Fresh -> maybe one of those?
  4. Write a simple inhouse solution in Django -> the most flexible one, but also the most error-prone.

What do you recommend?

1

GitLab is a solid good option for most of this (with the appropriate plan level - I don't think the CE one has everything). It's a single-pane-of-glass for your code, security, CI/CD, metrics, etc. You can create and deploy to kubernetes clusters from it.

  • You can have multiple environments and it'll store the secrets for you to customize them.
  • It will monitor your kubernetes apps and show deployment marks so you can see if they get better/worse performance wise before and after deployment.
  • You can do multi project pipelines and actions in parallel to chain things together and get things done fast.
  • It supports review apps and canary deployments.
  • It has rollback buttons and tracks every release you do. It also has a good API, so I assume you could hook up prometheus + alert manager and make the API trigger a rollback in response to an alert.

Spinnaker has https://www.armory.io/ if you're willing to pay a bit (not sure how much). But that should make it easy to use / effective.

I'm not amazingly fond of Jenkins, but it can do everything. Its hard to maintain over time / with bigger projects and teams though. But it can be customized to do anything. You may want to look into https://jenkins.io/projects/blueocean/ (the blue ocean plugin) for CD if you're leaning this way - it looks fairly impressive and I've heard good things.

|improve this answer|||||
0

I believe that to manage the builds / deploys follows by the same Jenkins you can use Blue Ocean theme it's more friendly and you can track CI/CD. For infrastructure I suggest use Rundeck (Cron like with web gui) + Ansible + ARA Records Ansible to track the plays.

|improve this answer|||||
0

Depending on where your source code is located and how you are setting up the to be deployed containers, this can also be solved very nice in Azure DevOps: https://cloud.google.com/solutions/creating-cicd-pipeline-vsts-kubernetes-engine

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.