1
00:00:00,000 --> 00:00:00,833
In this lesson,

2
00:00:00,833 --> 00:00:04,110
we will discuss Automating Application Development.

3
00:00:04,110 --> 00:00:05,910
Deploying innovative, robust,

4
00:00:05,910 --> 00:00:07,290
and secure applications quickly

5
00:00:07,290 --> 00:00:09,420
and consistently can be very challenging,

6
00:00:09,420 --> 00:00:12,360
but by automating our application development efforts,

7
00:00:12,360 --> 00:00:14,370
we can improve the efficiency, consistency,

8
00:00:14,370 --> 00:00:17,520
and the overall quality of our final software products

9
00:00:17,520 --> 00:00:19,350
being released and deployed.

10
00:00:19,350 --> 00:00:21,270
In the world of application development,

11
00:00:21,270 --> 00:00:23,520
automation really involves the use of technology

12
00:00:23,520 --> 00:00:26,940
to manage, test, and deploy new applications or features

13
00:00:26,940 --> 00:00:29,220
with minimal human intervention.

14
00:00:29,220 --> 00:00:31,680
In the days of legacy software development,

15
00:00:31,680 --> 00:00:34,410
every step of the software development testing, release,

16
00:00:34,410 --> 00:00:36,300
and deployment process was conducted

17
00:00:36,300 --> 00:00:39,960
by our software developers who are after all humans.

18
00:00:39,960 --> 00:00:43,140
Now, relying on humans for every step can be a major hurdle

19
00:00:43,140 --> 00:00:45,600
that slows down our release and deployment process.

20
00:00:45,600 --> 00:00:47,520
For example, under the older

21
00:00:47,520 --> 00:00:49,380
waterfall development methodologies,

22
00:00:49,380 --> 00:00:51,300
it could often take 3 to 12 months

23
00:00:51,300 --> 00:00:53,190
to create a software application.

24
00:00:53,190 --> 00:00:55,530
Luckily, in our modern development environments,

25
00:00:55,530 --> 00:00:57,900
we can use automations to help us develop software

26
00:00:57,900 --> 00:01:01,950
in a more iterative style to rapidly create, test, release,

27
00:01:01,950 --> 00:01:03,720
and deploy our applications.

28
00:01:03,720 --> 00:01:05,730
Simply by moving to a more iterative

29
00:01:05,730 --> 00:01:07,710
or Agile development style,

30
00:01:07,710 --> 00:01:10,800
we can see many features of the new software application

31
00:01:10,800 --> 00:01:13,410
being created and released within just a few weeks.

32
00:01:13,410 --> 00:01:15,930
But with the introduction of continuous integration

33
00:01:15,930 --> 00:01:18,210
and continuous deployment, we can see some features

34
00:01:18,210 --> 00:01:19,830
and software applications being created

35
00:01:19,830 --> 00:01:21,390
and released in the same day

36
00:01:21,390 --> 00:01:23,820
and in some really high velocity organizations,

37
00:01:23,820 --> 00:01:25,920
sometimes multiple times per day.

38
00:01:25,920 --> 00:01:28,470
For example, the photo sharing site Flickr

39
00:01:28,470 --> 00:01:30,570
had automated so much of their integration

40
00:01:30,570 --> 00:01:31,680
and deployment processes

41
00:01:31,680 --> 00:01:34,020
that they were releasing software patches, new features,

42
00:01:34,020 --> 00:01:36,690
and new functionality up to 10 times per day

43
00:01:36,690 --> 00:01:39,030
at the peak of their software development efforts.

44
00:01:39,030 --> 00:01:42,390
So hopefully, you can now see why we wanted to move

45
00:01:42,390 --> 00:01:44,370
from the waterfall development methodology

46
00:01:44,370 --> 00:01:46,410
to the Agile or iterative method,

47
00:01:46,410 --> 00:01:48,210
and now to a continuous integration

48
00:01:48,210 --> 00:01:49,980
and continuous deployment methodology

49
00:01:49,980 --> 00:01:52,650
to really decrease the time it takes to create

50
00:01:52,650 --> 00:01:56,610
and release a usable function or feature to our end users.

51
00:01:56,610 --> 00:01:59,520
By using continuous integration and continuous deployment,

52
00:01:59,520 --> 00:02:01,830
also known as CI/CD,

53
00:02:01,830 --> 00:02:04,740
we can significantly improve the efficiency, consistency,

54
00:02:04,740 --> 00:02:07,830
and overall quality of our software applications.

55
00:02:07,830 --> 00:02:09,990
So what is continuous integration?

56
00:02:09,990 --> 00:02:11,970
Continuous Integration or CI

57
00:02:11,970 --> 00:02:13,800
is a practice in software development

58
00:02:13,800 --> 00:02:16,380
where all of your developers merge their code changes

59
00:02:16,380 --> 00:02:19,710
into a central repository multiple times per day.

60
00:02:19,710 --> 00:02:23,130
Each check-in is then verified by automated build process

61
00:02:23,130 --> 00:02:24,780
can provide early notifications

62
00:02:24,780 --> 00:02:26,190
if there's a problem detected

63
00:02:26,190 --> 00:02:28,380
during the integration and build process.

64
00:02:28,380 --> 00:02:29,910
Using automation tools,

65
00:02:29,910 --> 00:02:32,580
we can easily manage the integration of code changes

66
00:02:32,580 --> 00:02:35,670
from multiple contributors into a single software project

67
00:02:35,670 --> 00:02:38,520
and provide us with some automatic notifications

68
00:02:38,520 --> 00:02:40,770
for any conflicts or errors.

69
00:02:40,770 --> 00:02:43,410
After integrating the code into the central repository,

70
00:02:43,410 --> 00:02:46,320
the system will automatically execute a series of tests

71
00:02:46,320 --> 00:02:49,110
on that code to help reduce the time and effort

72
00:02:49,110 --> 00:02:51,600
traditionally required by manual testing.

73
00:02:51,600 --> 00:02:53,400
This testing step is crucial

74
00:02:53,400 --> 00:02:55,230
for maintaining software quality

75
00:02:55,230 --> 00:02:58,020
when frequent updates and changes are being made

76
00:02:58,020 --> 00:03:01,110
by multiple developers across your organization.

77
00:03:01,110 --> 00:03:03,840
Immediately following the integration and testing stages,

78
00:03:03,840 --> 00:03:05,790
developers will often receive feedback

79
00:03:05,790 --> 00:03:07,470
on any issues that were detected

80
00:03:07,470 --> 00:03:10,320
so they can quickly correct or modify their code

81
00:03:10,320 --> 00:03:12,660
in response to the feedback that they receive

82
00:03:12,660 --> 00:03:15,180
from the automated testing process.

83
00:03:15,180 --> 00:03:16,920
This constant communication loop

84
00:03:16,920 --> 00:03:19,470
helps to ensure the integrity and functionality

85
00:03:19,470 --> 00:03:22,560
of the final software application is maintained.

86
00:03:22,560 --> 00:03:25,140
Now that the software is being continuously integrated,

87
00:03:25,140 --> 00:03:28,320
it still needs to be prepared for release and deployment.

88
00:03:28,320 --> 00:03:29,790
When we talk about a few releases,

89
00:03:29,790 --> 00:03:31,770
we're talking about the process of finalizing

90
00:03:31,770 --> 00:03:34,080
and preparing new software or updates,

91
00:03:34,080 --> 00:03:36,270
verifying through continuous integration

92
00:03:36,270 --> 00:03:38,610
for delivery into a specific environment.

93
00:03:38,610 --> 00:03:40,830
This environment could be a staging environment

94
00:03:40,830 --> 00:03:42,330
or a production environment,

95
00:03:42,330 --> 00:03:45,060
and the release process marks the transition point

96
00:03:45,060 --> 00:03:46,830
where a particular piece of software

97
00:03:46,830 --> 00:03:49,110
is ready for users to access it.

98
00:03:49,110 --> 00:03:51,090
Now, a deployment, on the other hand,

99
00:03:51,090 --> 00:03:54,660
involves the automated, consistent, and reliable process

100
00:03:54,660 --> 00:03:57,840
of pushing out new releases or versions of that software

101
00:03:57,840 --> 00:04:00,810
into a target environment like testing, staging,

102
00:04:00,810 --> 00:04:04,140
or production environment, so that it becomes operational

103
00:04:04,140 --> 00:04:06,360
and accessible to your end users.

104
00:04:06,360 --> 00:04:10,020
Now, I know this sounds like two very similar definitions,

105
00:04:10,020 --> 00:04:12,360
but there are key differences between them.

106
00:04:12,360 --> 00:04:13,980
When it comes to a release,

107
00:04:13,980 --> 00:04:15,720
it is making the software available

108
00:04:15,720 --> 00:04:18,029
to people who want to install and use it,

109
00:04:18,029 --> 00:04:21,000
whereas deployment involves actually installing the software

110
00:04:21,000 --> 00:04:22,860
into a new environment.

111
00:04:22,860 --> 00:04:25,800
Now, once the continuous integration is performed,

112
00:04:25,800 --> 00:04:27,780
we can then move into continuous delivery

113
00:04:27,780 --> 00:04:29,330
or continuous deployment.

114
00:04:29,330 --> 00:04:31,800
In the cybersecurity and software development world,

115
00:04:31,800 --> 00:04:34,380
we have two different types of CI/CD.

116
00:04:34,380 --> 00:04:37,170
One is continuous integration and continuous delivery,

117
00:04:37,170 --> 00:04:39,120
while the other is continuous integration

118
00:04:39,120 --> 00:04:40,470
and continuous deployment.

119
00:04:40,470 --> 00:04:42,480
Regardless of which one you choose to utilize

120
00:04:42,480 --> 00:04:43,530
in your organization,

121
00:04:43,530 --> 00:04:46,050
we always start with continuous integration,

122
00:04:46,050 --> 00:04:48,540
which we have already discussed in this lesson.

123
00:04:48,540 --> 00:04:51,060
Now we need to move to either the continuous delivery

124
00:04:51,060 --> 00:04:53,430
or continuous deployment option.

125
00:04:53,430 --> 00:04:56,100
Let's start with the continuous delivery option first.

126
00:04:56,100 --> 00:04:58,590
Continuous delivery ensures that the code base

127
00:04:58,590 --> 00:05:01,410
is always in a deployable state after every change

128
00:05:01,410 --> 00:05:04,440
through the use of automated testing and building processes.

129
00:05:04,440 --> 00:05:07,050
However, it stops short of pushing changes

130
00:05:07,050 --> 00:05:08,610
to production automatically.

131
00:05:08,610 --> 00:05:11,400
Basically, I want you to think about continuous delivery

132
00:05:11,400 --> 00:05:13,260
as part of a release process

133
00:05:13,260 --> 00:05:15,450
and not as part of the deployment process.

134
00:05:15,450 --> 00:05:16,860
In continuous delivery,

135
00:05:16,860 --> 00:05:19,200
the full deployment process is automated

136
00:05:19,200 --> 00:05:21,060
only up to a certain stage,

137
00:05:21,060 --> 00:05:22,980
such as in the development, testing,

138
00:05:22,980 --> 00:05:26,160
or staging environments, but it will not deploy

139
00:05:26,160 --> 00:05:28,230
into your live production environment.

140
00:05:28,230 --> 00:05:29,610
With continuous delivery,

141
00:05:29,610 --> 00:05:31,530
deployment into your production environment

142
00:05:31,530 --> 00:05:33,570
is considered to be a manual step

143
00:05:33,570 --> 00:05:35,430
so that you can retain the control

144
00:05:35,430 --> 00:05:37,500
over when and how the changes are deployed

145
00:05:37,500 --> 00:05:39,810
into your live production environment.

146
00:05:39,810 --> 00:05:42,180
This means that the deployment of the production environment

147
00:05:42,180 --> 00:05:44,610
is a business decision that takes into account

148
00:05:44,610 --> 00:05:47,520
various factors like timing, market conditions,

149
00:05:47,520 --> 00:05:49,410
and stakeholder readiness.

150
00:05:49,410 --> 00:05:52,410
By using continuous delivery, your team has more flexibility

151
00:05:52,410 --> 00:05:54,720
to decide when to deploy new changes

152
00:05:54,720 --> 00:05:56,160
into the production environment,

153
00:05:56,160 --> 00:05:58,920
while ensuring that they have a production-ready version

154
00:05:58,920 --> 00:06:00,780
of the software at all times.

155
00:06:00,780 --> 00:06:03,630
Now, this brings us to the concept of continuous deployment.

156
00:06:03,630 --> 00:06:05,820
Continuous deployment takes the process further

157
00:06:05,820 --> 00:06:08,010
by automatically deploying all code changes

158
00:06:08,010 --> 00:06:09,210
into a testing environment

159
00:06:09,210 --> 00:06:11,040
and then into a production environment

160
00:06:11,040 --> 00:06:13,380
after the build stage is completed.

161
00:06:13,380 --> 00:06:15,690
Every change that passes all stages

162
00:06:15,690 --> 00:06:17,130
of your production pipeline

163
00:06:17,130 --> 00:06:19,050
will be fully released to your customers

164
00:06:19,050 --> 00:06:20,550
with no human intervention

165
00:06:20,550 --> 00:06:22,710
to ensure that you can release updates

166
00:06:22,710 --> 00:06:25,650
and functions more frequently and reliably.

167
00:06:25,650 --> 00:06:28,320
Using automation helps to ensure that each deployment

168
00:06:28,320 --> 00:06:30,960
is executed in precisely the same manner

169
00:06:30,960 --> 00:06:33,360
by removing the human error from the process

170
00:06:33,360 --> 00:06:36,630
and also to provide us with faster deployment.

171
00:06:36,630 --> 00:06:38,430
In the event of a failure,

172
00:06:38,430 --> 00:06:40,260
there are automated rollback features

173
00:06:40,260 --> 00:06:42,300
in our continuous deployment processes

174
00:06:42,300 --> 00:06:44,880
that can revert our software or application

175
00:06:44,880 --> 00:06:47,370
back to the previous known state.

176
00:06:47,370 --> 00:06:50,550
Having this kind of rollback capability is really essential

177
00:06:50,550 --> 00:06:53,550
for maintaining service continuity and availability

178
00:06:53,550 --> 00:06:56,670
when relying on continuous deployment models.

179
00:06:56,670 --> 00:06:59,880
As you can probably guess, the use of continuous integration

180
00:06:59,880 --> 00:07:02,070
and continuous deployment in the development process

181
00:07:02,070 --> 00:07:04,800
requires a paradigm shift in the way developers

182
00:07:04,800 --> 00:07:06,840
and operational teams collaborate

183
00:07:06,840 --> 00:07:08,940
since we're constantly deploying changes

184
00:07:08,940 --> 00:07:10,950
into the live production network.

185
00:07:10,950 --> 00:07:13,440
With continuous integration and continuous deployment,

186
00:07:13,440 --> 00:07:15,660
our developers must become more involved

187
00:07:15,660 --> 00:07:19,200
in the postcode process by taking responsibility

188
00:07:19,200 --> 00:07:21,720
for the deployment and functioning of their code,

189
00:07:21,720 --> 00:07:24,570
instead of simply handing it off to the operational team

190
00:07:24,570 --> 00:07:27,240
to conduct the testing and deployment like they used to do

191
00:07:27,240 --> 00:07:30,300
in the older waterfall deployment methodology.

192
00:07:30,300 --> 00:07:33,840
Now, your operational teams will instead shift their focus

193
00:07:33,840 --> 00:07:36,330
from the task of managing deployment logistics

194
00:07:36,330 --> 00:07:39,330
to improving the process that enhances the streamlining

195
00:07:39,330 --> 00:07:41,940
and the flow of work from the development stage

196
00:07:41,940 --> 00:07:43,380
to the deployment stage.

197
00:07:43,380 --> 00:07:46,290
The use of continuous integration and continuous deployment

198
00:07:46,290 --> 00:07:49,020
also requires a shift towards increased communication

199
00:07:49,020 --> 00:07:52,110
and collaboration within your organization's various teams,

200
00:07:52,110 --> 00:07:55,080
which creates a culture of collective responsibility

201
00:07:55,080 --> 00:07:56,130
for a given project.

202
00:07:56,130 --> 00:07:57,870
By embracing the continuous integration

203
00:07:57,870 --> 00:07:59,790
and continuous delivery model,

204
00:07:59,790 --> 00:08:01,830
organizations will be able to more quickly adapt

205
00:08:01,830 --> 00:08:03,210
to changing market demands

206
00:08:03,210 --> 00:08:06,570
and allow them to work more efficiently towards their goals.

207
00:08:06,570 --> 00:08:08,340
For instance, here at Dion Training,

208
00:08:08,340 --> 00:08:10,500
we have implemented continuous integration

209
00:08:10,500 --> 00:08:13,050
and continuous deployment into our development processes

210
00:08:13,050 --> 00:08:14,820
so that we can merge our code

211
00:08:14,820 --> 00:08:16,860
from across our various software developers

212
00:08:16,860 --> 00:08:19,560
into a single code base hosted in GitHub,

213
00:08:19,560 --> 00:08:22,980
and then our code is automatically tested, built,

214
00:08:22,980 --> 00:08:26,340
and deployed into a testing and staging environment.

215
00:08:26,340 --> 00:08:29,280
At Dion Training, we have made the risk management decision

216
00:08:29,280 --> 00:08:31,440
to not implement continuous deployment,

217
00:08:31,440 --> 00:08:34,440
but instead we rely on continuous delivery instead.

218
00:08:34,440 --> 00:08:36,360
This allows our chief technology officer

219
00:08:36,360 --> 00:08:38,400
to work with our chief operations officer

220
00:08:38,400 --> 00:08:39,960
to determine when is the right time

221
00:08:39,960 --> 00:08:42,120
to push any new features, functions,

222
00:08:42,120 --> 00:08:44,340
or changes into our live production environment

223
00:08:44,340 --> 00:08:47,370
so that it becomes accessible for our students to utilize.

224
00:08:47,370 --> 00:08:49,740
So remember, when it comes to automating

225
00:08:49,740 --> 00:08:52,260
your application deployment, you will usually do this

226
00:08:52,260 --> 00:08:54,540
by configuring the use of continuous integration

227
00:08:54,540 --> 00:08:56,310
and continuous delivery,

228
00:08:56,310 --> 00:08:58,440
or the use of continuous integration

229
00:08:58,440 --> 00:08:59,883
and continuous deployment.

230
00:09:00,720 --> 00:09:03,420
This not only optimizes development process,

231
00:09:03,420 --> 00:09:05,760
but it also significantly lowers the risk

232
00:09:05,760 --> 00:09:09,240
of deployment failures, increases the frequency of releases,

233
00:09:09,240 --> 00:09:13,260
and ensures a new product is always ready to deploy.

234
00:09:13,260 --> 00:09:15,030
If your organization wants to stay relevant

235
00:09:15,030 --> 00:09:17,160
and competitive in a modern business environment

236
00:09:17,160 --> 00:09:19,560
that continuously demands faster, seamless,

237
00:09:19,560 --> 00:09:22,590
and more innovative applications, then it's important

238
00:09:22,590 --> 00:09:25,140
that you begin to automate your application development

239
00:09:25,140 --> 00:09:28,053
by using one of the CI/CD methodologies.

