In this lesson,
we will discuss Automating Application Development.
Deploying innovative, robust,
and secure applications quickly
and consistently can be very challenging,
but by automating our application development efforts,
we can improve the efficiency, consistency,
and the overall quality of our final software products
being released and deployed.
In the world of application development,
automation really involves the use of technology
to manage, test, and deploy new applications or features
with minimal human intervention.
In the days of legacy software development,
every step of the software development testing, release,
and deployment process was conducted
by our software developers who are after all humans.
Now, relying on humans for every step can be a major hurdle
that slows down our release and deployment process.
For example, under the older
waterfall development methodologies,
it could often take 3 to 12 months
to create a software application.
Luckily, in our modern development environments,
we can use automations to help us develop software
in a more iterative style to rapidly create, test, release,
and deploy our applications.
Simply by moving to a more iterative
or Agile development style,
we can see many features of the new software application
being created and released within just a few weeks.
But with the introduction of continuous integration
and continuous deployment, we can see some features
and software applications being created
and released in the same day
and in some really high velocity organizations,
sometimes multiple times per day.
For example, the photo sharing site Flickr
had automated so much of their integration
and deployment processes
that they were releasing software patches, new features,
and new functionality up to 10 times per day
at the peak of their software development efforts.
So hopefully, you can now see why we wanted to move
from the waterfall development methodology
to the Agile or iterative method,
and now to a continuous integration
and continuous deployment methodology
to really decrease the time it takes to create
and release a usable function or feature to our end users.
By using continuous integration and continuous deployment,
also known as CI/CD,
we can significantly improve the efficiency, consistency,
and overall quality of our software applications.
So what is continuous integration?
Continuous Integration or CI
is a practice in software development
where all of your developers merge their code changes
into a central repository multiple times per day.
Each check-in is then verified by automated build process
can provide early notifications
if there's a problem detected
during the integration and build process.
Using automation tools,
we can easily manage the integration of code changes
from multiple contributors into a single software project
and provide us with some automatic notifications
for any conflicts or errors.
After integrating the code into the central repository,
the system will automatically execute a series of tests
on that code to help reduce the time and effort
traditionally required by manual testing.
This testing step is crucial
for maintaining software quality
when frequent updates and changes are being made
by multiple developers across your organization.
Immediately following the integration and testing stages,
developers will often receive feedback
on any issues that were detected
so they can quickly correct or modify their code
in response to the feedback that they receive
from the automated testing process.
This constant communication loop
helps to ensure the integrity and functionality
of the final software application is maintained.
Now that the software is being continuously integrated,
it still needs to be prepared for release and deployment.
When we talk about a few releases,
we're talking about the process of finalizing
and preparing new software or updates,
verifying through continuous integration
for delivery into a specific environment.
This environment could be a staging environment
or a production environment,
and the release process marks the transition point
where a particular piece of software
is ready for users to access it.
Now, a deployment, on the other hand,
involves the automated, consistent, and reliable process
of pushing out new releases or versions of that software
into a target environment like testing, staging,
or production environment, so that it becomes operational
and accessible to your end users.
Now, I know this sounds like two very similar definitions,
but there are key differences between them.
When it comes to a release,
it is making the software available
to people who want to install and use it,
whereas deployment involves actually installing the software
into a new environment.
Now, once the continuous integration is performed,
we can then move into continuous delivery
or continuous deployment.
In the cybersecurity and software development world,
we have two different types of CI/CD.
One is continuous integration and continuous delivery,
while the other is continuous integration
and continuous deployment.
Regardless of which one you choose to utilize
in your organization,
we always start with continuous integration,
which we have already discussed in this lesson.
Now we need to move to either the continuous delivery
or continuous deployment option.
Let's start with the continuous delivery option first.
Continuous delivery ensures that the code base
is always in a deployable state after every change
through the use of automated testing and building processes.
However, it stops short of pushing changes
to production automatically.
Basically, I want you to think about continuous delivery
as part of a release process
and not as part of the deployment process.
In continuous delivery,
the full deployment process is automated
only up to a certain stage,
such as in the development, testing,
or staging environments, but it will not deploy
into your live production environment.
With continuous delivery,
deployment into your production environment
is considered to be a manual step
so that you can retain the control
over when and how the changes are deployed
into your live production environment.
This means that the deployment of the production environment
is a business decision that takes into account
various factors like timing, market conditions,
and stakeholder readiness.
By using continuous delivery, your team has more flexibility
to decide when to deploy new changes
into the production environment,
while ensuring that they have a production-ready version
of the software at all times.
Now, this brings us to the concept of continuous deployment.
Continuous deployment takes the process further
by automatically deploying all code changes
into a testing environment
and then into a production environment
after the build stage is completed.
Every change that passes all stages
of your production pipeline
will be fully released to your customers
with no human intervention
to ensure that you can release updates
and functions more frequently and reliably.
Using automation helps to ensure that each deployment
is executed in precisely the same manner
by removing the human error from the process
and also to provide us with faster deployment.
In the event of a failure,
there are automated rollback features
in our continuous deployment processes
that can revert our software or application
back to the previous known state.
Having this kind of rollback capability is really essential
for maintaining service continuity and availability
when relying on continuous deployment models.
As you can probably guess, the use of continuous integration
and continuous deployment in the development process
requires a paradigm shift in the way developers
and operational teams collaborate
since we're constantly deploying changes
into the live production network.
With continuous integration and continuous deployment,
our developers must become more involved
in the postcode process by taking responsibility
for the deployment and functioning of their code,
instead of simply handing it off to the operational team
to conduct the testing and deployment like they used to do
in the older waterfall deployment methodology.
Now, your operational teams will instead shift their focus
from the task of managing deployment logistics
to improving the process that enhances the streamlining
and the flow of work from the development stage
to the deployment stage.
The use of continuous integration and continuous deployment
also requires a shift towards increased communication
and collaboration within your organization's various teams,
which creates a culture of collective responsibility
for a given project.
By embracing the continuous integration
and continuous delivery model,
organizations will be able to more quickly adapt
to changing market demands
and allow them to work more efficiently towards their goals.
For instance, here at Dion Training,
we have implemented continuous integration
and continuous deployment into our development processes
so that we can merge our code
from across our various software developers
into a single code base hosted in GitHub,
and then our code is automatically tested, built,
and deployed into a testing and staging environment.
At Dion Training, we have made the risk management decision
to not implement continuous deployment,
but instead we rely on continuous delivery instead.
This allows our chief technology officer
to work with our chief operations officer
to determine when is the right time
to push any new features, functions,
or changes into our live production environment
so that it becomes accessible for our students to utilize.
So remember, when it comes to automating
your application deployment, you will usually do this
by configuring the use of continuous integration
and continuous delivery,
or the use of continuous integration
and continuous deployment.
This not only optimizes development process,
but it also significantly lowers the risk
of deployment failures, increases the frequency of releases,
and ensures a new product is always ready to deploy.
If your organization wants to stay relevant
and competitive in a modern business environment
that continuously demands faster, seamless,
and more innovative applications, then it's important
that you begin to automate your application development
by using one of the CI/CD methodologies.