Proof of concept pipeline
Submitted By Jenkins User Filipe Costa
Assigned with designing the optimal automation and testing pipeline for CI/CD, this intern chose to use Jenkins.
Summary: Designing the optimal automation and testing pipeline for CI/CD using Jenkins.
Organization: Portugese digital platform company
Industry: IT Consulting
Team: Andreas Vilela, Product Owner; Alvaro Almeida, Senior Software Developer; Andre Sousa, Professor; Filipe Costa, Technology Intern
Programming Language: .NET Core Platform: Docker or Kubernetes, Windows Version Control System: GitLab Build Tool: NuGet, Nexus, Docker
Community Support: Spoke with colleagues and peers, and relied on Jenkins.io websites & blogs
Automated testing pipeline for CI/CD.
Background: When I joined as an intern for a company that offers a comprehensive digital platform for small and medium businesses, I was asked to build a prototype to help their dev team automate a testing pipeline for CI/CD. The biggest challenge I had was having the Jenkins pipeline produce, test and QA results that could be easily interpreted by the development team. That meant integrating a diverse set of components that were virtualized as infrastructure resorting to Docker.
Goals: The goal of this project was to transition from Web API Deployments Via IIS to WEB API deployments using Docker and Nginx while automating the STLC for the backend of the applications.
Solution & Results: I designed a pipeline prototype composed of three freestyle jobs: ModelClasses, A Web API and a .NET Core application to Docker.
The ModelClasses followed TDD practices, with a single addition method that would later be packaged and pushed to a remote artifact repository and pushed all the source code to GitLab. Following this, I built a very simple Web API, using .NET Core 2.2 integrated with Swagger UI. It includes two methods on the controller class, one for a GET request and another for a POST request, with their respective integration and performance tests. I decided to include Slack notification to have the developers aware about the status of the jobs.
After the demo Web API was fully functional, I ported the .NET Core application to Docker, stored it in an image repository (Docker Registry 2.0), and launched it in a Docker container. These were fundamentally the three steps that were part of the last freestyle job.
The code and the scope of this project was to build a prototype pipeline in the simplest way possible, to serve as a proof of concept, to highlight a different way of developing software. After that, I’d apply the same sort of wizardry on more complex applications. It is not a perfect pipeline (by far), but this enabled me to get started on learning Jenkins, automation and virtualization concepts. And I’m loving it so far!
What I appreciated the most about this project is that Jenkins tied all the infrastructure together and kept things easy to manage. If I hadn’t tried out Jenkins, I would definitely have had a much more difficult time finishing my Master’s degree and the company I was working for would have not have had the assistance needed to help define their infrastructure.
This project resulted in:
- build times which were more predictable
- the ability to timely measure SDLC and STLC
- consolidation of SDLC and STLC stages
- freeing up developers from systematic and time-consuming tasks
- faster-than-ever backend development