Many challenges face today’s software development teams. They must improve productivity, address external security threats, and adopt new technologies to improve uptime and scalability. Travis CI enabled the Cloud Kubernetes Service team at IBM to address all of these issues. Leveraging Travis CI as part of their DevOps culture change, IBMers decreased deployment times from weeks to hours, improved security, and were able to build their applications at scale.
Michel McKay, the DevOps lead for the IBM Cloud Kubernetes Service team, was able to meet with us and share his insights into adopting Travis CI and how it has benefited his work.
Adopting a microservice architecture at IBM
The IBM Cloud Kubernetes Service team encountered many challenges as they started to scale. Developers were accustomed to building for a single environment with complex deployments at semi-regular intervals. Teams didn’t always know how or when their changes made it into production, making it exceedingly difficult to iterate and improve on their work. To prevent failures, a gated process for building and deploying applications was employed. This process slowed things down for the Cloud Kubernetes Services team.
Switching to Travis CI was a technological and cultural shift for IBM. By moving away from the notion of building one monolithic application and hoping it would adequately serve everyone, the IBM Cloud Kubernetes Service team adopted a microservices architecture. Now every team can rely on Travis CI to leverage modern development best practices and ultimately create a build configuration that works for them.
The IBM Container Services CI/CD Pipeline
When Mike set out to build the IBM Cloud Kubernetes Services offering, he realized that moving to a modern, cloud-based architecture, would require the team’s work style to evolve as well. They needed teams to be more responsible for what they built, tested, and delivered. It was important to remove the reliance on a single build and ops team that was managing a complex monolithic application. By breaking applications into microservices deployed in their own containerized environments, the development speed increased dramatically. Travis CI was critical in facilitating this change.
Mike wanted centralized teams to own as little Continuous Integration and Continuous Delivery tooling and infrastructure as possible. He wanted to rely on experts on project teams to manage the health of a project through transparent development processes. Travis CI’s tight integration with GitHub was especially critical to an organization the size of IBM Cloud Kubernetes Service – with GitHub Enterprise and Travis CI Enterprise everyone knows the status of a change, and when it made it to users.
Rapid development requires stable systems that are well-understood by everyone interacting with them. Instead of defaulting to a unique environment for every project, the new pipeline focuses on commonality and differentiates only application-specific details, such as environment variables. Teams can test sooner and with an eye toward failing faster on the unit tests, with the intention to stomp out any bugs before the Pull Request is approved. Integration and acceptance testing are left for the end of the process.
Tools to promote engineering culture change at IBM
In day-to-day use at IBM, Travis CI functions as an automation hub; a key setup for a comprehensive continuous delivery process. Once configuring Travis CI, teams at IBM can easily deliver code changes made in GitHub to IBMs Container Registry and Cloud Object Storage.
“We can quickly tell what version of what microservice should be running, and what versions are actually running in the environment. The cool thing is that we can make deployments as fine-grained or as broad as we want.” - said Mike.
Travis CI has also enabled the Cloud Kubernetes Services team to improve the security and standardization of their testing environments. Although each group owns its build process, the secrets used for testing and deployment are centralized and individually encrypted for each environment. The decryption keys are only available to Travis CI, which means the development teams can store their secrets more securely and reduce duplication of credentials. This practice frees up time and reduces friction for developers.
“Don’t try to do everything yourself, use what’s already there.” - Mike emphasized.
Travis CI has also provided a blueprint for modernization and best practices within IBM. In one case, rather than building notification systems for every single application, the Cloud Kubernetes Service team have relied on Travis CI’s Slack integration to keep them informed about specific builds. Switching from build scripts to a version-controlled
.travis.yml file allowed the Cloud Kubernetes Service team to rely on Travis CI’s build lifecycle semantics to indicate when and where different steps should run, in a standardized way that is familiar to people in other parts of the organization.
To improve visibility and give the team a better overview of what is running and where, Mike and his team created Razee. Razee is an open-source project to automate and manage the deployment of Kubernetes resources across clusters, environments, and cloud providers, and to visualize deployment information for your resources so that you can monitor the rollout process and find deployment issues more quickly.
Moving to a continuous delivery model enabled by Travis CI has allowed the Cloud Kubernetes Services organization to go from deploying once a week at best, to once per hour. Developers now have a process that enables them to move quickly to build features and address issues.
Before using Travis CI, the IBM Cloud Kubernetes Services team build environment was owned by a small group within the team. After adopting Travis CI, each project team configured their build environment in a way that worked best for them. Leveraging this paradigm helped create a culture where the entire team felt a sense of ownership of the process.
Now, Travis CI is an established part of the IBM Cloud Kubernetes Services team toolchain with thousands of developers at IBM using Travis CI. Developers continue to benefit from the flexibility, control, security, and productivity improvements. Travis CI works well in the enterprise engineering environment because it supports team independence. Travis CI’s native support for the GitHub Flow gives the ability to see the impact of their work quickly.
“It has been a game changer for us because our process to deploy was hours if not days before this, we were only building and deploying maybe once a week. We got to the point now that we’re deploying continuously.” - summarized Mike.
About the IBM Cloud Kubernetes Service team
Michael McKay is the DevOps lead for the IBM Cloud Kubernetes Service team, and he told us the story for how IBMers are using Travis CI to deploy to IBM Cloud Kubernetes Service.