In past blog posts, I wrote about how DevOps is the natural evolution of the development culture for developers, operations teams, and business stakeholders. In this digital world, developing applications is part of every business that wants to go to market much faster with their products, services, and solutions. Doing so requires an agile development method that involves a continuous integration (CI) and a continuous delivery or deployment (CD) process in their environment. These two critical workflows or processes embody the DevOps practice. Let’s look into what CI and CD workflows are in an agile development model.
Continuous integration is an automated and iterative test and build process that enables teams to find bugs in code in the early stages of the development process. The CI process does not fix bugs but identifies where the bugs were introduced and removes them. Bugs can be identified at various levels: with unit and smoke tests in developers’ workspaces, during gated code check-ins, or during precode analysis before code check-in to the code repository or CI admin running builds and regressions. This process reduces development costs and build cycles and provides more flexibility.
Continuous delivery and continuous deployment are used interchangeably, but there is a difference between the two processes. Continuous delivery means that a successful build can be promoted to QA testing or preproduction staging requirements. The build to QA and to staging workflows is completely automated. However, manual engagement is required to deploy the application into production, as shown in Figure 1. For example, a cellphone manufacturer develops new firmware for its phone using the CI process but does not deploy the new firmware every day. So the software undergoes rigorous compliance and QA testing before the firmware is pushed out to mobile phone consumers. The release cadence can be longer with bug fixes and enhanced features.
Continuous deployment, on the other hand, is completely automated, from build through application deployment. No manual process is involved to promote an application to production. Continuous deployment is extremely helpful to consumer-driven businesses and e-commerce vendors that constantly push new features, content, and services to mobile devices, websites, social media, and other channels in very short release cycles. Automating the continuous deployment workflow along with continuous integration enables organizations to have an integrated code pipeline that pushes out new products, services, and features in days or hours compared to weeks or months.
Some might argue that continuous deployment is all about configuring the infrastructure that involves compute, network, and storage with high uptime. But to me it is more of a continuous operation in which the software and hardware resource changes are managed efficiently and in an automated process across different development platforms.
Although the goal of having a CI and CD workflow in a DevOps practice seems reachable to many organizations, the journey to having an agile development process poses a lot of challenges. Over the years, the application development landscape has been different to different teams within an organization. Each team has its own tools, platforms, and release cadence, which results in lengthening the go-to-market time. Applications might work in one environment but not in another because of the differences of tools and platforms.
With the evolution of DevOps, new roles have been introduced that are responsible for automating the infrastructure and the development workflows using RESTful APIs. The focus has shifted from the core IT and storage admins to the infrastructure developers, as illustrated in Figure 2, who provide various levels of services. These services include build as a service, deployment as a service, database as a service, security as a service, backup as a service, archival as a service, and so on through automation that enables the developers to use infrastructure as code. Infrastructure developers, also known as service providers, are responsible for operating and managing the services with adequate automation for the storage, network, and compute that are consumed by the developers.
Apart from infrastructure developers, there are also line-of-business (LoB) or application owners, who are the main decision makers in adopting an agile development workflow for their development environment. These decision makers have to fight an uphill battle in their organizations, facing challenges such as the following:
- Transformation: When the core IT is not spontaneous or responsive enough to modernize the infrastructure-related dependencies that consume time and money, LoB or application owners either move to the public cloud to meet their development needs or use platform as a service (PaaS) in their environment. Although the public cloud provides more transparency with the underlying infrastructure requirements, PaaS enables organizations to keep data on the premises if security is a concern. PaaS also allows faster deployment of the application and many other applications. This capability paves the way for a shadow IT that functions in an agile mode. This transformation becomes more relevant as the application development process becomes more business or consumer focused rather than IT centric.
- Competition: Only a small number of organizations have been fortunate enough to adopt the DevOps practice. A lot of midsize to large organizations are still fighting the battle to catch up with the changing landscape of application development and to enable faster time to market. However, startups and social media organizations are making the transformation, which is having a ripple effect on traditional enterprises and is forcing them to adopt agile development workflows.
- Consolidation: Over the years, different teams and business units had their developers use a variety of tools and libraries that are now obsolete and do not have any support. Sadly, these tools are tightly integrated in their workflows and it is very difficult to isolate and eliminate them from their environments. Developers must make an enormous effort to eliminate the legacy tools and embrace new tools that can be shared by different teams, either local or remote, in their development workflows. That effort involves both time and cost.
- Standardization: Developers writing and deploying code use different platforms and different infrastructure. This disparity inhibits the proper packaging of applications when deploying them in production. Standardizing enables the deployment and the availability of standard application building blocks across development teams, which results in massive boosts in developer productivity and agility.
Despite the challenges, data is generated, processed, stored, and managed with an agile process. Data scaling, performance, and high availability are the key requirements for such an agile development model. NetApp, with its All Flash FAS and native technologies, provides horizontal scaling and submillisecond latency with flash for predictable performance and very high uptime. Cultural changes are not limited to the developer community; these changes also affect operators and service providers who consume infrastructure as a code for an agile development model. By integrating with various DevOps ecosystem partners, NetApp enables infrastructure and application developers to abstract the underlying infrastructure through various service offerings.
Come and meet NetApp at Jenkins World, Santa Clara Convention Center, September 13-15.