Submitted By Jenkins User Mark Baumann
With each project team creating its own workflows and toolchain, a company-wide off-the-shelf solution was needed.
Organization: ITK-Engineering GmbH is a technology company that develops tailored software solutions for customers in various industries
Industry: Cross-industry software development
Programming Language: Python
Platform: Embedded, Docker or Kubernetes, Linux, Windows
Version Control System: BitBucket Server
Build Tool: Bash
Community Support: Jenkins.io websites & blogs, networking at Jenkins event, and spoke with colleagues and peers
A CI solution that caters to the complex problems
that project teams face each day.
Background: I work as a DevOps engineer at ITK-Engineering GmbH, along with software engineers Damyan Yordanov, Patrick Schuster, and Björn Hach. Our work varies from software development and embedded systems to control system projects across the automotive, manufacturing, rail, medical technology, and motorsports industries. Due to the varied nature of our assignments, we need one CI to rule them all.
Our development teams work in a wide range of projects and domains. We have a very diverse tooling landscape since the projects work with all kinds of different software tools. Of course projects in the embedded domain will have a different toolset than those working in the automotive domain.
Each team was creating its own CI Toolchain which caused a lot of work for the developers and the IT department. Each project needed to set up their own virtual machine, install and manage their own CI Server, Version Management, and whatever they needed. Creating such a toolchain could easily take up weeks until it was running because there was no common solution and each team had to start from scratch.
It was hard to reuse any of the tooling developed in those projects. From a global perspective, it was impossible to enforce and manage the different security patches for the services. So the goal was to provide an off the shelf solution for all those different kinds of workflows and tooling.
Goals: Provide a company-wide, common, internal CI/CD Toolchain to cater to the needs of our software development teams.
Solution & Results: To enable our software teams to provide high-quality software, with fast delivery cycles for very complex domain-specific problems, we needed a solution that is well tested, widely used, and very flexible. For us, the most crucial part was to provide a service that could cater to all the complex problems our projects teams face each day.
Jenkins fits those requirements like no other CI solution on the market. It has an unbelievable list of plugins, is widely used in different domains, and is flexible so it can run all kinds of workloads. Further, Jenkins has a very vibrant community and is actively progressing. Jenkins is the central part of our CICD toolchain to orchestrate all the other tools.
Our complete CI/CD toolchain consists of Bitbucket Server for Version Control, Sonarqube for code analysis, Artifactory for artifact management, Jira, and Confluence.
To improve the utilization of our infrastructure we are running Jenkins in a Kubernetes cluster which makes it easy to scale if we need more resources. All projects benefit from it. We are using a lot of different plugins but, of course, the plugins for Kubernetes, Bitbucket, Artifactory, and Docker are invaluable for us.
If it is not possible to run the builds in the Kubernetes cluster in Docker Containers, projects can set up there own build infrastructure in a dedicated build agent. It doesn’t matter which kind of platform they need to tie in, Jenkins can handle it. We are running embedded tests on dedicated Linux hosts attached to laptops on the desk of a developer or Matlab builds on Windows machines.
The complete process of creating a toolchain for a specific project is automated and it just takes a couple of minutes to set up. Having a working full-featured CI/CD pipeline is now only a matter of hours for our project teams. Developers can now focus on their main task, which means solving the problems of their customers.
Through the creation of a global CI/CD platform, we now have also a “common language”, which makes it much easier to learn from others and share our knowledge and reuse it in different projects. Of course, we just started our journey and we hopefully will never finish improving the usability of our toolchain so our project teams can provide even better quality to their customers.
Overall, Jenkins allowed us to provide a common CI/CD platform for all different kinds of projects and technology domains. I don’t think we could have done this with any other CI/CD tool. Jenkins you rock!
Here are some of the capabilities and plugins we used:
- Scalability through utilizing Kubernetes
- Jenkins API
- Jenkins Pipeline Plugin
- Jenkins Kubernetes Plugin
- Jenkins Docker Build Step Plugin
- Jenkins Docker Pipeline Plugin
- Jenkins Bitbucket Plugin
Jenkins helps us in so many ways, including:
- generally, increased number of builds for each project
- a higher degree of automated builds, due to easy integration and orchestration
- increased motivation for projects to improve their CI/CD pipelines, because it works!
- nearly all departments are now practicing CI/CD in their projects
- ability to measure general project improvements through metrics