The following is a guest blog from Chris Farrell, technical director and APM strategist at Instana.
Do you know if your new software build performs better or worse than the last one? Is your new deployment causing unintended impacts to upstream and downstream services. Do you know if your new release has improved or ruined the overall customer experience?
Most companies are automating all of the stages of the software development lifecycle (SDLC) to increase the rate at which they deploy new software and to reduce the number of problems introduced by human error. Automation is the key to going faster with fewer defects and choosing the right tooling is the key to successful automation. In this post we’re going to focus on getting automated feedback about the quality of new builds and releases across the complete SDLC.
Automated Build and Deploy Feedback with Jenkins
Jenkins is the leading open-source automation server used for continuous integration (CI) and continuous delivery/ Deployment. Jenkins automatically builds software when triggered to do so. There are multiple ways to trigger builds with the most common methods being post-commit or on a schedule.
As with many open-source projects, there are a number of commercial vendors associated with Jenkins CloudBees is an active participant in the Jenkins community and plays a significant role in supporting the project. A number of key contributors to the Jenkins project are employed by CloudBees.
CloudBees has built an enterprise-grade secure, extensible and scalable solution on top of the Jenkins project. Empower your teams to continue working with the tools they need. With CloudBees CI, your teams will be using a flexible, governed CI/CD you can trust. CloudBees offers a hardened version of CloudBees CI, which meets the United States Department of Defense (DoD) specifications for security.
You’ll get peace of mind when it comes to plugin management through the CloudBees’ Assurance Program (CAP). No more unverified, unsupported or questionable plugins. CAP verifies, secures and supports commonly used Jenkins plugins. With built-in best practices, teams can automatically provision build servers, enabling them to scale your DevOps infrastructure to teams of any size in the cloud or on-prem.
Jenkins allows you to see if a build job completed successfully or if it failed. Of course, this is an important part of the SDLC process but it provides a limited perspective. Did this build lead to a performance regression? Are users experiencing functional issues when they exercise your new release? Have we introduced a change that is causing issues in upstream or downstream services? Jenkins can’t answer these questions, but Instana can.
Automated Pipeline Feedback with Instana
Instana Pipeline Feedback provides automated analysis of application development and deployment pipeline events, correlated directly with application, infrastructure and service performance data.
Instana creates observability of the development and deployment pipeline, and understands the relationship between the code cycle and quality. The new Pipeline Feedback capability gives DevOps practitioners immediate understanding of the impact, positive or negative, that a new release has on the services.
Using the Instana Pipeline Feedback Integration for Jenkins plugin, users of Instana are able to easily visualize, identify and correlate issues that may occur when new releases are made available to their users.
Through the use of an API call or utilizing the Jenkins plugin, users of Instana can visualize a release as an annotation on every graph in their environment as shown in the screenshot below. This marker serves as a reference point to quickly spot regressions or improvements in the performance of their applications.
Figure 1: Instana’s Pipeline Feedback in the Dashboard View
Another useful feature of the Pipeline Feedback is the Release Health Indicator, which offers easy insight into whether a release has positive or negative effects on the system's health. To quantify system health, Instana automatically correlates multiple related events into Incidents. The Release Health Indicator bar, positioned in the Incidents view, provides immediate measure of system health before and after a release.
Figure 2: Instana’s Pipeline Feedback with Release Markers in the Incidents View (Preview)
Monitoring Jenkins to Keep Your Pipelines Flowing
There is a monitoring plugin for Jenkins that provides a lot of data about what’s going on within Jenkins and about the tasks being performed by Jenkins. This Jenkins monitoring plugin relies on JavaMelody which is a basic metric charting tool. There is a demo of JavaMelody available for those who want to see what it’s like. While it does contain a lot of data, the understanding of what is happening in the environment is left for the user to figure out. Simply put, monitoring Jenkins with a native tool like the Jenkins monitoring plugin is okay but not sufficient for ensuring your pipelines keep flowing.
Using Instana, you can achieve a fully integrated view of Jenkins, the application services it builds, the underlying infrastructure, and the state of the deployment tool (such as Kubernetes).
Figure 3 – Comprehensive Jenkins monitoring summary of Jobs and Builds
In the screenshot above (figure 3) you can see an overview of the Jobs and Builds executed by Jenkins over the selected time period (last 12 hours). The “Last Build Duration” chart is used to see if there are any anomalies or spikes in the time it takes to complete a build. Any changes in build duration over time are easily visible here.
Figure 4 – Expanded view of Jenkins monitoring summary showing Job details
When you expand the Jobs section (figure 4) you can see more detail about each job such as type of job, number of last build, status of last build (failed, success), health status of recent builds (success percentage), duration of last build, estimated duration for last build and start time of last build. Obviously, this is where you can check to see if any build jobs are failing and investigate why that might be happening.
Figure 5 – Thread, Heap, Memory, and more details about the JVM that Jenkins is running in.
Notice the breadcrumb trail at the top of the screenshot (figure 5). It shows the dependencies between the Jenkins service, the JVM it runs in, the Java process, and the running host. You can select any of the components in the breadcrumb trail to see more details about that component. In this case, you see details relevant to the JVM. If there were any thread, heap, or memory pool issues they would show up here. It’s important to monitor the stack that Jenkins runs on so that you will know if there are any resource contention issues slowing down Jenkins and delaying your builds and deployments.
Jenkins is one of the most popular automation servers for CI/CD today. Instana is able to automatically detect issues and identify the root cause of problems in your Jenkins build pipeline because it understands the relationships between Jenkins and the full stack supporting the Jenkins service. Use these complementary tools to help you build and deploy software faster than ever with fewer defects.