← Back to courses

Course

CI/CD & DevOps Automation

134 lessons across 10 modules

Intermediate, assuming Git, basic Docker, and basic Linux. Every pipeline concept taught once, then built in GitHub Actions, GitLab CI/CD, and Jenkins - followed by automated testing, Docker images, deployment strategies, and pipeline security, ending in a full pipeline from pull request to production. The road is laid out in full; lessons are being written one at a time.

Course10 modules134 lessonsEach heading below is a module (one topic). Each card under it is a lesson. Start with Module 1.
Solid: ready (0)Dashed: coming soon (134)
Module 1 of 1010 lessonsComing soon

CI/CD Fundamentals

What the three terms mean, and why teams bother

What is CI/CD?

1

Automating the path from a commit to running software.

A merge that reaches users without anyone logging into a server

Lesson 1planned

Continuous Integration

2

Merging small changes often, each one built and tested automatically.

A broken test caught ten minutes after it was written

Lesson 2planned

Continuous Delivery

3

Definition - every change is releasable, and a human decides when.

A release that is one button press away at any moment

Lesson 3planned

Continuous Deployment

4

Definition - every change that passes goes to production on its own.

Twenty production releases in one day, none of them manual

Lesson 4planned

CI vs CD

5

Where integration ends and delivery begins.

A team doing CI well and still releasing quarterly

Lesson 5planned

Benefits of CI/CD

6

Smaller changes, faster feedback, and cheaper failures.

A bug traced to one small commit instead of a month of work

Lesson 6planned

CI/CD Pipeline Lifecycle

7

Trigger, run, report, and act on the result.

Following one commit from push to deployment

Lesson 7planned

Build, Test, Package, Deploy

8

The four stages nearly every pipeline shares.

The same four stages in a Node, a Python, and a Java project

Lesson 8planned

CI/CD in Modern Software Development

9

How pipelines shape branching, reviews, and team habits.

Why trunk-based teams depend on a fast pipeline

Lesson 9planned

CI/CD vs Traditional Deployment

10

Release weekends and manual checklists, compared honestly.

The same release done by hand and by pipeline

Lesson 10planned
Module 2 of 1010 lessonsComing soon

Git and CI/CD

The branching and review habits a pipeline depends on

Git Fundamentals for CI/CD

11

The parts of Git a pipeline actually relies on - commits, refs, and hooks.

Which Git events a pipeline can be triggered by

Lesson 11planned

Branching Strategies

12

How long branches live, and what that does to integration.

A two-week branch and the merge conflict it produced

Lesson 12planned

Feature Branch Workflow

13

One branch per change, merged through review.

feature, pull request, review, merge, pipeline

Lesson 13planned

Git Flow

14

Develop, release, and hotfix branches - and why it has fallen away.

A hotfix that had to be merged into three branches

Lesson 14planned

Trunk-Based Development

15

Short-lived branches merged to main daily, kept safe by the pipeline.

Unfinished work merged behind a feature flag

Lesson 15planned

Pull Requests

16

The unit of change, and the checks a pipeline runs against it.

A pull request that cannot merge until its checks pass

Lesson 16planned

Code Review

17

What humans should review once machines check the rest.

A review focused on design because lint already ran

Lesson 17planned

Merge Strategies

18

Merge commits, squash, and rebase - and the history each leaves.

The same branch merged three ways, and the log afterwards

Lesson 18planned

Git Tags and Releases

19

Marking a commit as a release, and triggering a pipeline from it.

Pushing a tag that builds and publishes a release

Lesson 19planned

Semantic Versioning

20

Major, minor, and patch - and automating the bump.

A version derived from commit messages rather than chosen by hand

Lesson 20planned
Module 3 of 1010 lessonsComing soon

CI Pipeline Fundamentals

Every pipeline concept, taught once and tool-free

What is a CI Pipeline?

21

An automated sequence that turns a commit into a verdict.

Push, install, lint, test, build, and produce an artifact

Lesson 21planned

Pipeline Stages

22

Grouping work into ordered phases, failing fast at the cheap ones.

Lint running before a ten-minute test suite

Lesson 22planned

Jobs and Steps

23

A job is an isolated unit of work; steps run inside it in order.

Two jobs that cannot share files without an artifact

Lesson 23planned

Runners and Agents

24

The machines that actually execute the jobs.

A hosted runner against one you run yourself

Lesson 24planned

Environment Variables

25

Configuring a pipeline without hard-coding values.

One pipeline file serving three environments

Lesson 25planned

Secrets

26

The concept - credentials stored apart from code and masked in logs.

A token that shows as *** in the job output

Lesson 26planned

Artifacts

27

Files one job produces and a later job or a person consumes.

A build output passed from build to deploy

Lesson 27planned

Pipeline Caching

28

Reusing downloads between runs, and what makes a cache key right.

A dependency install falling from three minutes to fifteen seconds

Lesson 28planned

Pipeline Dependencies

29

Which jobs wait for which, and running the rest in parallel.

Lint and tests running side by side, build waiting for both

Lesson 29planned

Pipeline Failure Handling

30

Failing clearly, retrying only what is genuinely flaky.

A flaky test retried into hiding a real bug

Lesson 30planned
Module 4 of 1015 lessonsComing soon

GitHub Actions

The Module 3 concepts, expressed as workflow files

Introduction to GitHub Actions

31

CI/CD built into GitHub, driven by YAML in the repository.

A first workflow running on every push

Lesson 31planned

Workflow Files

32

The structure of a workflow under .github/workflows.

Reading a real workflow top to bottom

Lesson 32planned

Events and Triggers

33

push, pull_request, and the rest - with branch and path filters.

A workflow that skips runs when only docs change

Lesson 33planned

Jobs

34

Jobs run in parallel on separate runners by default.

Lint and test as two jobs finishing at the same time

Lesson 34planned

Steps

35

Shell commands and actions, run in order within a job.

Checkout, set up Node, install, test

Lesson 35planned

Actions

36

Reusable steps from the marketplace - and pinning them to a SHA.

A third-party action pinned so it cannot change underneath you

Lesson 36planned

Runners

37

GitHub-hosted runners, their images, and what they cost.

ubuntu-latest against a larger runner for a heavy build

Lesson 37planned

Environment Variables

38

env at workflow, job, and step level, and the contexts that fill them.

A variable overridden for one job only

Lesson 38planned

Secrets

39

Repository, environment, and organisation secrets.

A production secret available only to the production environment

Lesson 39planned

Artifacts

40

Uploading and downloading files between jobs.

A test report attached to the run for later inspection

Lesson 40planned

Caching Dependencies

41

The cache action, and setup actions that cache for you.

setup-node caching npm with one extra line

Lesson 41planned

Matrix Builds

42

One job definition run across several versions or platforms.

Tests on Node 20, 22, and 24 in parallel

Lesson 42planned

Job Dependencies

43

needs, and passing outputs from one job to the next.

A deploy job that waits for tests and reads the build version

Lesson 43planned

Manual Workflows

44

workflow_dispatch, with inputs chosen at run time.

A deploy button that asks which environment

Lesson 44planned

Scheduled Workflows

45

Cron triggers, and their limits.

A nightly dependency audit that opens an issue on failure

Lesson 45planned
Module 5 of 1015 lessonsComing soon

GitLab CI/CD

The same concepts, the GitLab way

Introduction to GitLab CI/CD

46

CI/CD built into GitLab, driven by one YAML file.

A first pipeline appearing after one commit

Lesson 46planned

.gitlab-ci.yml

47

The structure of the pipeline file, and includes for reuse.

A shared template included by twenty projects

Lesson 47planned

Stages

48

Ordered stages, with jobs in a stage running in parallel.

test, build, and deploy as three stages

Lesson 48planned

Jobs

49

Jobs, their scripts, and the image each runs in.

A test job running inside a Node image

Lesson 49planned

Runners

50

Shared, group, and project runners, and runner tags.

A job routed to a runner with a GPU by tag

Lesson 50planned

Variables

51

Predefined, file, project, and group variables.

CI_COMMIT_SHA used to tag a build

Lesson 51planned

Secrets

52

Masked and protected variables, and external secret stores.

A deploy key usable only on protected branches

Lesson 52planned

Artifacts

53

Artifacts, their expiry, and reports GitLab understands.

A test report rendered inside the merge request

Lesson 53planned

Cache

54

Cache keys, and how cache differs from artifacts in GitLab.

node_modules cached per lockfile hash

Lesson 54planned

Pipeline Dependencies

55

needs, and the directed acyclic graph it creates.

A pipeline that stops waiting for a whole stage

Lesson 55planned

Rules

56

Deciding when a job runs - by branch, path, or variable.

A deploy job that exists only on main

Lesson 56planned

Branch Pipelines

57

Pipelines that run for pushes to branches.

Different jobs for feature branches and for main

Lesson 57planned

Merge Request Pipelines

58

Pipelines that run against a merge request, and avoiding duplicates.

One pipeline per push instead of two

Lesson 58planned

Manual Jobs

59

Jobs that wait for someone to press play.

A production deploy gated behind a manual step

Lesson 59planned

GitLab Environments

60

Tracking what is deployed where, with protected environments.

A view showing exactly which commit is in production

Lesson 60planned
Module 6 of 1015 lessonsComing soon

Jenkins

The self-hosted classic that many companies still run

What is Jenkins?

61

A self-hosted automation server with a huge plugin ecosystem.

Why a company with its own data centre often still runs it

Lesson 61planned

Jenkins Architecture

62

The controller, agents, jobs, and plugins as one picture.

Where a build actually runs, and where its state lives

Lesson 62planned

Jenkins Controller and Agents

63

Their roles in the architecture - and never building on the controller.

A build on the controller that took the whole server down

Lesson 63planned

Installing Jenkins

64

Running Jenkins in a container, with its home directory on a volume.

A Jenkins that survives being recreated

Lesson 64planned

Jenkins Jobs

65

The kinds of job, and why pipelines replaced the rest.

The job types compared side by side

Lesson 65planned

Freestyle Projects

66

Jobs configured through the UI - and why that does not scale.

A configuration nobody can review or roll back

Lesson 66planned

Jenkins Pipeline

67

A pipeline defined as code instead of clicks.

The freestyle job rewritten as a pipeline

Lesson 67planned

Jenkinsfile

68

The pipeline kept in the repository, versioned with the code.

A pipeline change reviewed in a pull request

Lesson 68planned

Declarative Pipeline

69

The structured syntax most pipelines should use.

Install, test, and build as three declarative stages

Lesson 69planned

Scripted Pipeline

70

Groovy with full control, and when that is worth it.

A dynamic set of stages generated in a loop

Lesson 70planned

Credentials

71

The credentials store, and binding credentials into a step.

A registry password available only inside one block

Lesson 71planned

Plugins

72

The ecosystem - and the upgrade and security burden it brings.

A plugin update that broke three pipelines

Lesson 72planned

Webhooks

73

Letting the Git host notify Jenkins instead of polling.

A build starting within seconds of a push

Lesson 73planned

Build Triggers

74

Webhooks, schedules, upstream jobs, and manual runs.

A nightly build and an on-push build from one pipeline

Lesson 74planned

Jenkins Agents

75

Configuring agents - labels, Docker agents, and ephemeral cloud agents.

A clean container agent created for every build

Lesson 75planned
Module 7 of 1012 lessonsComing soon

Automated Testing in CI/CD

The checks that make an automatic release safe

Testing Node.js in depth →

Testing Strategy in CI/CD

76

Which tests run where, balanced for speed and confidence.

Fast checks on every push, the full suite before a merge

Lesson 76planned

Unit Tests

77

The fast, numerous tests that run first.

Thousands of unit tests finishing in under a minute

Lesson 77planned

Integration Tests

78

Tests against real dependencies started inside the pipeline.

A PostgreSQL service container spun up for one job

Lesson 78planned

API Tests

79

Exercising endpoints the way a client would.

Supertest running against the built API

Lesson 79planned

End-to-End Tests

80

A real browser against a deployed build - few and valuable.

A login-to-checkout test run against staging

Lesson 80planned

Code Coverage

81

Reporting coverage, and why a coverage target can mislead.

Coverage shown on the pull request, not enforced blindly

Lesson 81planned

Linting

82

Style and correctness checks that cost seconds.

A lint failure blocking a merge before any test runs

Lesson 82planned

Static Code Analysis

83

Type checks and analysers that find bugs without running code.

A type error caught in CI that the tests missed

Lesson 83planned

Security Scanning

84

Scanning source code and its dependencies for known problems.

A vulnerable dependency flagged on the pull request

Lesson 84planned

Quality Gates

85

Rules that decide whether a change may proceed.

A merge blocked by one new critical finding

Lesson 85planned

Test Failure Handling

86

Reporting failures clearly, and quarantining flaky tests.

A flaky test isolated instead of retried forever

Lesson 86planned

Parallel Testing

87

Splitting a slow suite across machines.

A twenty-minute suite split four ways into five minutes

Lesson 87planned
Module 8 of 1012 lessonsComing soon

Docker and CI/CD

Building, scanning, and publishing images from a pipeline

The Docker course →

Why Use Docker in CI/CD?

88

One image built once, tested, and promoted unchanged.

The exact image that passed staging reaching production

Lesson 88planned

Building Docker Images

89

Building inside a pipeline, and Docker-in-Docker against BuildKit.

An image built on a runner with no Docker daemon of its own

Lesson 89planned

Dockerfile in CI

90

Writing Dockerfiles that build well in a pipeline.

Instruction order changed to keep the cache warm in CI

Lesson 90planned

Docker Build Cache

91

Keeping layer cache between runs on ephemeral runners.

A registry-backed cache cutting a build from eight minutes to one

Lesson 91planned

Docker Compose in CI

92

Starting a whole stack for integration tests.

An API and its database brought up for one test job

Lesson 92planned

Image Tagging

93

Tagging images to match the Git commit and release version.

An image tagged with both its commit SHA and v2.3.1

Lesson 93planned

Container Registry

94

Where pipelines push images and deployments pull them.

Choosing a registry that sits close to where you deploy

Lesson 94planned

Docker Hub

95

Pushing to Docker Hub from a pipeline, and its pull limits.

A pipeline failing on the anonymous pull rate limit

Lesson 95planned

Amazon ECR

96

Pushing to ECR, authenticating with a short-lived token.

A pipeline pushing to ECR with no long-lived keys

Lesson 96planned

GitHub Container Registry

97

Images stored beside the code, pushed with the built-in token.

A workflow publishing to ghcr.io with no extra secrets

Lesson 97planned

Image Security Scanning

98

Scanning the built image before it can be pushed.

A critical vulnerability in the base image blocking the push

Lesson 98planned

Push Image to Registry

99

Pushing only from protected branches, and recording the digest.

Deploying by digest so the image cannot change afterwards

Lesson 99planned
Module 9 of 1015 lessonsComing soon

CD and Deployment Strategies

Environments, rollout patterns, and changing a live system safely

Continuous Delivery Pipeline

100

Building a delivery pipeline that ends at a release decision.

A pipeline that stops at an approval before production

Lesson 100planned

Continuous Deployment

101

Removing the approval, and what must be true before you can.

The test and monitoring maturity automatic releases require

Lesson 101planned

Deployment Environments

102

A chain of environments, each a closer copy of production.

One build promoted through four environments

Lesson 102planned

Development Environment

103

Fast feedback, deployed on every merge.

A dev environment always running the latest main

Lesson 103planned

QA Environment

104

A stable target for testers, updated deliberately.

A QA environment that does not change during a test cycle

Lesson 104planned

Staging Environment

105

The last rehearsal - configured as close to production as you can afford.

A bug that only a production-like staging could catch

Lesson 105planned

Production Environment

106

Protected, audited, and changed only by the pipeline.

Production credentials that no person holds

Lesson 106planned

Environment Variables

107

Per-environment configuration for one immutable build.

The same image with different settings in each environment

Lesson 107planned

Blue-Green Deployment

108

Two environments, and switching all traffic at once.

An instant switch back when the new version misbehaved

Lesson 108planned

Rolling Deployment

109

Replacing instances a few at a time.

A rollout that paused itself on failing health checks

Lesson 109planned

Canary Deployment

110

A small share of traffic first, widened as metrics stay healthy.

Five per cent of users on the new version, then everyone

Lesson 110planned

Feature Flags

111

Separating deploying code from releasing a feature.

A feature turned off in seconds without a deployment

Lesson 111planned

Rollbacks

112

Returning to the last good version, fast and rehearsed.

A rollback that had never been tried, and did not work

Lesson 112planned

Database Migration in Deployment

113

Changing a schema without breaking the version still running.

Expand, migrate, then contract - across three releases

Lesson 113planned

Zero-Downtime Deployment

114

Health checks, draining, and compatible changes together.

A release during peak traffic that nobody noticed

Lesson 114planned
Module 10 of 1020 lessonsComing soon

Production CI/CD and DevOps Project

Securing and operating pipelines, then building one end to end

Deploying on AWS: the AWS course →

CI/CD Security

115

A pipeline holds production credentials, so it is an attack target.

A malicious pull request that tried to read deploy secrets

Lesson 115planned

Secrets Management

116

Production practice - OIDC, short-lived credentials, and rotation.

A pipeline that deploys without a single stored cloud key

Lesson 116planned

Least Privilege

117

Each job allowed only what that job needs.

A test job with no permission to deploy anything

Lesson 117planned

Dependency Security

118

Keeping dependencies patched automatically, and reviewing the updates.

Automated update pull requests merged after CI passes

Lesson 118planned

Supply Chain Security

119

Pinned actions, SBOMs, signed artifacts, and build provenance.

A compromised third-party action that pinning would have stopped

Lesson 119planned

Pipeline Monitoring

120

Tracking duration, failure rate, and flakiness over time.

A pipeline that crept from five minutes to twenty unnoticed

Lesson 120planned

Build Notifications

121

Telling the right person, promptly, and only when it matters.

A failure message sent to the commit author, not the whole team

Lesson 121planned

Deployment Notifications

122

Announcing what shipped, where, and with which changes.

A channel message listing every change in the release

Lesson 122planned

Pipeline Optimization

123

Caching, parallelism, and skipping work that has not changed.

A pipeline cut from twenty-five minutes to six

Lesson 123planned

Self-Hosted Runners

124

Running your own runners - cost, control, and the security risks.

An ephemeral runner destroyed after every job

Lesson 124planned

Infrastructure Deployment

125

Deploying infrastructure as code through the same pipeline.

A plan shown for review before any change is applied

Lesson 125planned

Production Troubleshooting

126

Debugging failed pipelines and failed deployments methodically.

A deploy that passed every check and still broke production

Lesson 126planned

CI/CD Best Practices

127

The checklist worth applying to any pipeline.

A real pipeline reviewed against the list

Lesson 127planned

Complete CI/CD Architecture

128

Every stage from pull request to production, on one page.

The full pipeline drawn before the project is built

Lesson 128planned

Project - PR Validation and Automated Tests

129

Lint, unit, and integration tests gating every pull request.

A pull request that cannot merge until every check is green

Lesson 129planned

Project - Docker Image and Scanning

130

Building the Next.js and Express images, and scanning each one.

An image blocked from the registry by a critical finding

Lesson 130planned

Project - Registry and Environment Secrets

131

Pushing to the registry, with secrets scoped per environment.

Staging and production each receiving only their own secrets

Lesson 131planned

Project - Staging Deployment

132

Every merge to main deployed to staging automatically.

Every merge running in staging within minutes

Lesson 132planned

Project - Production Deployment

133

Promotion to production behind an approval, deployed on AWS.

The exact staging image promoted, not rebuilt

Lesson 133planned

Project - Rollback and Notifications

134

A rehearsed rollback, and announcements for every deployment.

A bad release rolled back, with the channel told both times

Lesson 134planned