Monday, March 19, 2018

Making Cloud Native simple: Jenkins X

You have probably heard that all companies are now software companies and that to compete you need to be embracing cloud native applications to ensure your company has the ability to adapt quickly - or you will soon be out of business. This is true by the way, but its also a little daunting for all of us. You have to be an expert in your programming languages of choice, be well versed in how your business works, and now need to understand what exactly cloud native means, what are containers and what are the latest trends in cloud technologies.

So lets make a quick list of things you should be doing:

1. Decompose your monolithic applications - or not. To generalise, you probably really should give this a lot of careful thought: its domain and application specific - i.e. only you can decide if it make sense (but it probably does).

Image result for kubernetes logo2. Containers - or Docker or Moby - which really you need to think about containerd, or rkt  or something that complies with the OCI. Which is why people talk about containers - its all got too confusing.

3. Orchestrating your containers - i.e. service discovery, auto scaling, fault tolerant platform to run your containerised applications. Thankfully, this recently got a whole lot easier - with Kubernetes emerging as the one that will be supported by all the major public clouds, and existing cloud platforms.

4. Configure, release version, rollback and inspect your application deployments in a standard, or de facto standard way. Luckily Helm is excellent for this.
5. CI/CD - in order the extract the most value from cloud native, you need a continuous delivery system that will enable a predictable, repeatable release process, and enable continuous improvement via streamlining your development processes.
6. Monitoring - ideally you want to monitor the performance of your deployed applications and feed this back into your CD system.

This is an intimidating list to look at, but its probably already out of date because technology is moving at such a pace its really difficult to keep up.

@jenkins-xWhat if you could abstract yourself away from all the technology bleeding edge and save yourself the paper cuts - and just concentrate on adding business value? Well this is the aim of Jenkins X - a new project that is part of the Jenkins ecosystem, as explained by James Strachan here.

We started Jenkins X at the begining of the year, taking the experience gained from the fabric8 project to develop an open source system that was targeted at these aims.  By concentrating on Kubernetes and utilising its wider ecosystem at the Cloud Native Computing Foundation, we have been able to develop a robust, targeted project that focuses on the needs of developers of cloud native apps.

In summary Jenkins X provides the following:

1. Abstracts away the gnarly bits of cloud native (you probably don't want be concerned with using skaffold for example). Its all still there, you can peel back the curtain as much as you like, but its nicer if you don't have to.
2. Automated CI/CD Pipelines - using Jenkins, configured to work well for cloud native
3. Environments - promotion using git based work flows, and preview environments  for pull requests.

This is all setup for you - you can aim Jenkins X at an existing project (or create a new one from scratch) - and select your cloud provider of choice and let us do the rest.

A small(ish) caveat: we target Kubernetes, so check here first.

Most public cloud providers allow free trials, or provide credits - which is more than enough to kick the tyres with Jenkins X - or you could try a local-machine solutions, such as Minikube.