By Aaron Nassiry, DevOps Engineer, and Venkat Kothapoll, DevOps Engineer, Salesforce
One of the coolest things about working for Salesforce is that we’re constantly exploring and innovating with new technologies. It keeps reminding us that we’re in the midst of a digital revolution – what some have called the fourth industrial revolution – where breakthroughs in automation, robotics, and of course artificial intelligence are radically changing the way we make, sell, and consume products.
That innovative spirit has taken hold all across the Salesforce community, including the company’s software development organization where we work. Here we’re using AI to provide better personalization and a better experience for customers. With the help of Einstein Analytics, for example, we can enable businesses to provide a connected and well-rounded service to customers. That’s just one area we’re working in.
Overall our IT department supports more than 1,200 developers – a number that keeps growing by the day – using the latest DevOps technologies. To scale our operations easily and control costs, we’re automating our CI/CD tools in the cloud using Kubernetes and CloudBees CI – and doing it all with code. In fact, our entire DevOps platform is now code, quite simply because doing it any other way would be suboptimal.
Keep in mind that our customers' needs naturally evolve over time, so the software products we build must evolve in step. That means our product development has become a continuous process of delivering new features and improving the quality and reliability or our platform. To do this, we need a rock-solid and state-of-the-art continuous integration and continuous delivery platform, tooling and processes.
Over time, we’ve gradually matured and adapted our DevOps platform and culture. Not long ago, for example, our Jenkins environment was like a household pet that needed constant feeding and attention. We had dozens of build agents that required regular maintenance and security patches, and plenty of downtime too. As a result, we kept pushing the limits of our data center, as well as staff bandwidth.
Welcome to the New DevOps Platform
Thanks to our migration to Amazon Web Services, we're now taking full advantage of cloud native technologies, including Kubernetes EKS and CloudBees CI, to build, deploy and manage all our software applications.
The difference is like night and day. For instance, we now have autoscaling in the cloud, so we never run out of capacity. As computing demand goes up, our environment automatically expands to handle it with more Kubernetes pods, more nodes, and more EC2 (Elastic Compute Cloud) machines. Then as demand eases off, the infrastructure automatically scales down. How can you beat that?
It gets better. Our disaster recovery system is now just a click of a button away, and our EFS (encrypting file system) grows to petabytes without any downtime to Jenkins. And, our whole infrastructure is code (Terraform code), so I can run that code in any region and have the entire DevOps environment up and running in less than two hours. What about security? Well, we can rest easy at night because we get security updates automatically from Amazon with every new AMI (Amazon Machine Image) release.
CloudBees CI
Rounding out our new-and-improved DevOps platform is CloudBees CI, which leverages deep integrations with Kubernetes, simplifying management for tools administrators and adding a layer of security and compliance. It’s integrated with Amazon EKS and features a control pane that is managed for us right in AWS. Suffice to say, having so many tasks and services handled by AWS is great for our team because it allows us to focus on better tooling and DevOps processes for our developers.
We’re using the Kubernetes Cluster Autoscaler with CloudBees CI, which allows us to scale the environment up and down with ease. Another benefit: We don’t have to run all those static images like we did before, reducing our operational costs dramatically. Finally, we should mention a really awesome CloudBees plugin we use called JCasC – short for Jenkins Configuration as Code. It’s by far and away the simplest way to manage all your Jenkins configurations, and one of the key features that helps us manage everything as code.
So, that’s a glimpse into our new DevOps world at Salesforce today! We're happy to be here!
Want to learn more about how Salesforce is using CloudBees CI to transform software development? Check out Aaron and Venkat’s presentation - “Cloud Native DevOps at the Scale of Salesforce” - from DevOps World.