Continuous Manual Deployment

Continuous Deployment and Continuous Integration have been hot topics for a while now. And for me they have always been almost synonymous with using something like Jenkins. When you push code, something should pick up that commit, run al the tests and then deploy to production.

But do we actually need Jenkins or any other form of pipelines? What problem does it solve? For me, it solves that deploying and running tests is hard, and should therefore be done often. So we let Jenkins do it so we don’t have to think about it. If we have branches we want to run tests on them so we know everything is green when we review the pull request.

But what if, deploying is extremely simple, takes 30s and is already done often? What if running all tests is always done anyway? What if you don’t have any branches?

The setup we have at work is very simple. We write small services, we write unit tests and we deploy to Kubernetes. We almost always do mob programming, and in the cases when we don’t mob we instead do review before commit. So there are no branches.

So what problem would Jenkins solve for us? Here are some i can think of:

  • Get rid of “works on my machine” symptoms, we havent noticed any problems with that yet though.
  • A natural place to run end to end system tests. But we dont have any tests except unit tests. And i think canary releases and good monitoring is a better tool for the same job.
  • It forces a deploy for every push. And since we do that anyway, i dont think its worth introducing a tool for.
  • It forces you to always write deployable code. You cant change multiple services and then do a synchronised deploy. Im not sure if i think its worth to be able to skip complexity sometimes, at the cost of introducing coupling between versions of services.
  • You dont have to remember to run tests, deploy etc. But i think mob programming limits that problem alot.

What we have to think about before adding Jenkins to the work flow, is that it(or any other similar system) comes with a cost. The problem it solves has to be worth the cost. Today, i don’t think it is. Someday it might be though, its always important to re-evaluate everything continuously.