One-click deployments. The Neil Armstrong step for code. That has been a recent goal to automate the deployment process. It has revolutionized the software industry. In order to move beyond one-click deployments, we have introduced the concept of no-click deployments. To have a fully automated process of where your application will end up deploying itself is the future.
There is a checklist that teams go through before they can truly successfully deploy. This has been a human process in the past. First, let's check to see if the app jobs have been successful, Ok, now let's see if this other job is successful, and now let's see if there are any bugs, let's see if there are any issues in that environment, let's check these other places that could be automated for any issues that could affect the deployment. All of these checks can become automated in some form and perform the deployments for you. As teams deploy more and more frequently to different environments and the checks grow and grow, there will be less overhead, less error, and ultimately less human error.
What it does
We allow the registration of a job to be executed on a schedule. Once the job has been registered, when the scheduled time arrives, the deployment process will get kicked off. Comapare does the checks that the human would normally end up doing in an automated fashion. Specifically, comapare (in its current state) will be checking the status of the Jenkins build jobs associated with the namespace. We end up taking the readiness of the deployment on these metrics to determine whether or not a deployment is ready to be executed. If the checklist has been passed, then the deployment will happen. We visually rank the namespaces based on their ability to continuously deliver, this is to be used for future enhancements such as looking across multiple namespaces for dependent deployments.
How I built it
We used the python Jenkins API package to query the service for build information and, using this information, determined which apps were in a stable state. This information is then persisted in a redis database using the redis python package. Then, using JQuery and Flask, the information was retrieved and templates were created for it to be rendered.
Challenges I ran into
We integrated with unknown technologies and APIs. We were unfamiliar with python and the available Jenkins API that was used for this project, so there was a bit of learning that needed to be done. There were also issues when trying to build/run redis-server locally on Windows. Because the idea is so expansive, the checklist that we ended up having is minimum in comparison to what it could be. It was difficult narrowing down the checklist to represent the idea.
Accomplishments that I'm proud of
The team came together on the day of and was able to execute on the idea. We learned new technologies throughout the day.
What I learned
After the ramp up, we became a lot more comfortable with the packages used and redis. We also became more familiar with the Jenkins API and what available information can be grabbed/analyzed.
What's next for Comapare
We've created a checklist idea that anyone adding checks to their deployments could continually grow and enhance the value add to a no-click deployment concept. Features (checks) that can be added could consist of the following:
- Looking across different applications for dependencies to validate or caution during a deployment -- If networking/infrastructure end up deploying changes that could have a high impact on the operations of an app
- Setting up dependencies between application deployments -- App B is ready before App A, app B queues up its deployment to go through the checks and auto deploys after App A deploys.
- Checking the operationals of the environment that is to be deployed into
- Integrating with a ticketing system such as JIRA for closing of sprints to represent code completion
- Integrating checks for deployments to former environments to enforce no deployments to higher environments -- No one would be able to deploy to PROD without deploying to QA/DEV
- Integrating with a text/cognitive recognition to monitor emails for any potential issues in the day to day There is great potential in the list to continually grow and enhance the continuous delivery process.