Git, CI/CD & GitOps · Curriculum
Curriculum
716 lessons across 124 parts. Lessons build on each other; later parts assume familiarity with earlier material.
Part I
Version Control Foundations
Purpose of version control; snapshots, history, collaboration, reproducibility, auditability, and the infrastructure-as-code implications.
- 01Version control foundations — snapshots, history, and auditabilityFoundations · foundation · ~18 min
- 02Snapshots and the history model — what a commit really recordsFoundations · foundation · ~18 min
- 03Collaboration and conflict — concurrent edits and the merge boundaryFoundations · foundation · ~20 min
- 04Reproducibility and immutable references — the commit hash as the unit of reproducibilityFoundations · foundation · ~17 min
- 05Auditability and chain of trust — from production state back to a commitFoundations · foundation · ~19 min
- 06Infrastructure-as-code implications — why IaC has a stricter version-control bar than application codeFoundations · foundation · ~20 min
Part II
Git Architecture
Working tree, index, repository, objects, refs, plumbing vs porcelain commands.
- 01The working tree, the index, and the repository — the three areas Git operates onArchitecture · foundation · ~19 min
- 02The three-trees model — HEAD, index, and working tree as a navigation systemArchitecture · foundation · ~18 min
- 03Plumbing versus porcelain — the low-level commands Git is built onArchitecture · intermediate · ~21 min
- 04The .git directory layout — what lives where under the repositoryArchitecture · intermediate · ~20 min
- 05Environment variables and config files — how Git finds its repository and its settingsArchitecture · intermediate · ~20 min
- 06Git as a content-addressed store — why hashes are the identityArchitecture · intermediate · ~19 min
Part III
Git Objects
Blob, tree, commit, tag, OIDs, content-addressed storage, plumbing commands.
- 01The three object types — blob, tree, commit, tagGit Objects · intermediate · ~18 min
- 02Object IDs and hashing — what the SHA covers and why collisions matterGit Objects · intermediate · ~20 min
- 03Blob objects — content only, no filename, deduplicated by hashGit Objects · intermediate · ~17 min
- 04Tree objects — directory entries, mode bits, and recursive sub-treesGit Objects · intermediate · ~21 min
- 05Commit objects — parents, tree pointers, author versus committer, signaturesGit Objects · intermediate · ~22 minLab
- 06Tag objects — annotated tags, lightweight tags, and signed tagsGit Objects · intermediate · ~19 min
Part IV
Commit Graph and History
Parent relationships, DAG, ancestry, history traversal with git log.
- 01The commit DAG — what Git is really a graph ofCommit Graph and History · intermediate · ~18 min
- 02Parent references — first parent versus all parentsCommit Graph and History · intermediate · ~18 min
- 03Ancestry and reachability — what `reachable` actually meansCommit Graph and History · intermediate · ~20 min
- 04History traversal — log options that actually change the graph walkCommit Graph and History · intermediate · ~20 min
- 05Graph topology and merges — what merge commits actually encodeCommit Graph and History · intermediate · ~22 minLab
- 06The octopus and its cost — when multi-parent merges help and when they hurtCommit Graph and History · intermediate · ~20 min
Part V
Branches, Refs and HEAD
Branch pointers, references namespace, HEAD, detached HEAD state.
- 01Refs and the refs namespace — refs/heads, refs/tags, refs/remotesBranches, Refs and HEAD · intermediate · ~18 min
- 02Branches are pointers — what a branch really isBranches, Refs and HEAD · intermediate · ~17 min
- 03HEAD and current state — what HEAD actually isBranches, Refs and HEAD · intermediate · ~16 min
- 04Detached HEAD state — what it means, why it is dangerous, and how to recoverBranches, Refs and HEAD · intermediate · ~18 min
- 05Tags versus branches — what tags are for, annotated versus lightweight, and why branches are not releasesBranches, Refs and HEAD · intermediate · ~18 min
- 06Packed refs and the reflog — when refs are packed, and how the reflog records every ref changeBranches, Refs and HEAD · intermediate · ~19 min
Part VI
Index / Staging Area
Working tree to index to repository, partial staging, interactive add.
- 01The index explained — what the staging area is and why Git has oneIndex · intermediate · ~18 min
- 02git add mechanics — what staging actually does under the hoodIndex · intermediate · ~20 min
- 03Partial staging with -p — hunk-level staging for clean commitsIndex · intermediate · ~21 min
- 04Staging versus skipping — git add, .gitignore, and the untracked bucketIndex · intermediate · ~19 min
- 05The index as a commit preview — git diff --cached and the review before commitIndex · intermediate · ~17 min
- 06Resetting and restore on the index — git reset, git restore, and choosing the right undoIndex · intermediate · ~22 min
Part VII
Repository Inspection
git status, git log, git show, git diff in all their forms.
- 01git status decoded — staged, unstaged, untracked, and the porcelain contractInspection · intermediate · ~18 min
- 02git log fundamentals — reading history, decoding the default outputInspection · intermediate · ~18 min
- 03git log formatting — pretty formats, custom output, and machine-readable contractsInspection · intermediate · ~20 min
- 04git show and the commit object — inspecting one commit in fullInspection · intermediate · ~17 min
- 05git diff three ways — working tree, index, and HEADInspection · intermediate · ~21 min
- 06git blame and annotation tracking — per-line authorship and code archaeologyInspection · intermediate · ~19 min
Part VIII
Branching
Branch creation, switching, divergence, collaboration patterns.
- 01Branch creation and switching — git switch, git checkout, and the three-tree updateBranching · intermediate · ~18 min
- 02The branch lifecycle — listing, sorting, filtering, and auditing branchesBranching · intermediate · ~17 min
- 03Divergence and shared history — the commit graph when two branches splitBranching · intermediate · ~19 min
- 04Tracking and upstream — what `@{u}` means and how branches are linked to remotesBranching · intermediate · ~18 min
- 05Branch naming and organization — patterns that signal intent to the teamBranching · intermediate · ~16 min
- 06Branch deletion and recovery — git branch -d, git branch -D, and the reflog resurrection pathBranching · intermediate · ~22 min
Part IX
Merging
Fast-forward, three-way merge, merge commits, octopus merge.
- 01Fast-forward merges — when a merge is just a pointer moveMerging · intermediate · ~20 min
- 02Three-way merges — when fast-forward is not possibleMerging · intermediate · ~22 min
- 03Merge commits and --no-ff — forcing topology for auditMerging · intermediate · ~22 min
- 04The merge process — what Git actually does during a mergeMerging · intermediate · ~24 min
- 05Aborting a merge — when to abort, and how the state is restoredMerging · intermediate · ~20 min
- 06Merge strategies — recursive, resolve, octopus, ours, subtreeMerging · intermediate · ~24 min
Part X
Merge Conflicts
Realistic Terraform, Ansible, Kubernetes, YAML conflict resolution.
- 01When merges conflict — the three cases the algorithm cannot resolveConflicts · intermediate · ~20 min
- 02The conflict markers — reading <<<<<<<, =======, and >>>>>>>Conflicts · intermediate · ~18 min
- 03Resolving by hand — opening files, reading hunks, choosing sidesConflicts · intermediate · ~22 min
- 04Resolving with tools — git mergetool, VS Code, and merge tool configurationConflicts · intermediate · ~22 min
- 05IaC conflict examples — Terraform state, Ansible inventory, Kubernetes YAMLConflicts · intermediate · ~24 minLab
- 06Conflict prevention — short branches, small commits, rerere, and the human layerConflicts · intermediate · ~20 min
Part XI
Rebasing
Rebase mechanics, commit replay, interactive rebase, history rewriting.
- 01What rebase does — replaying commits on a new baseFoundations · advanced · ~20 min
- 02Rebase versus merge — when linear history is worth the rewriteFoundations · advanced · ~22 min
- 03Interactive rebase — the editor interface and the six verbsInteractive Rebase · advanced · ~24 min
- 04Rebase execution and stoppoints — when rebase pauses and how to resumeExecution · advanced · ~22 min
- 05Autosquash and fixup — folding review-fixup commits automaticallyAutosquash · advanced · ~20 min
- 06Shared history risks — why rewriting pushed commits is dangerousSafety · advanced · ~22 minLab
Part XII
Merge vs Rebase
Trade-offs, when to use which, team policy.
- 01The merge versus rebase trade-off in detail — preservation versus rewriteFoundations · advanced · ~22 min
- 02When to rebase — local branches, cleanup, and pre-merge replayFoundations · advanced · ~20 min
- 03When to merge — shared branches, integrations, and release topologyFoundations · advanced · ~20 min
- 04Team policy and consistency — why the team must pick one verb and stick to itPolicy · advanced · ~18 min
- 05IaC and the merge-rebase question — Terraform state, configuration drift, and forced mergesIaC · advanced · ~22 min
- 06The hybrid workflow — feature rebase, fast-forward into main, and trunk-based developmentPatterns · advanced · ~20 min
Part XIII
Cherry-Pick
Backporting, hotfixes, duplicated-history implications.
- 01What cherry-pick does — replaying a single commit onto another branchFoundations · advanced · ~18 min
- 02Cherry-pick conflicts — when the replay does not apply cleanlyConflicts · advanced · ~20 min
- 03Backporting hotfixes — moving a fix without merging everythingBackporting · advanced · ~22 min
- 04Cherry-picking multiple commits — ranges and batchesRanges · advanced · ~20 min
- 05Cherry-pick versus merge — choosing between targeted and combined historyComparison · advanced · ~22 min
- 06When not to cherry-pick — changes that must travel as a unitBoundaries · advanced · ~20 min
Part XIV
Revert
Safe history-preserving reversal of changes.
- 01What revert does — producing a new commit that undoes a changeFoundations · advanced · ~18 min
- 02Revert versus reset — additive undo versus history rewritingFoundations · advanced · ~20 min
- 03Reverting a merge commit — `git revert -m 1 <merge>` and the mainline parentMergeReverts · advanced · ~22 min
- 04Revert without committing — staging the inverse with `git revert -n`Foundations · advanced · ~18 min
- 05Revert and the history audit trail — why every revert is visibleHistoryAudit · advanced · ~18 min
- 06Revert versus redeploy — when to roll back, when to fix forwardOperations · advanced · ~22 min
Part XV
Reset
Soft, mixed, hard reset modes and destructive consequences.
- 01Reset modes explained — --soft, --mixed, --hard, --merge, --keepModes · advanced · ~20 min
- 02Soft reset — moving HEAD and keeping staged changesModes · advanced · ~18 min
- 03Mixed reset — moving HEAD and resetting the indexModes · advanced · ~20 min
- 04Hard reset — the destructive mode and when it is acceptableModes · advanced · ~22 min
- 05Reset with file paths — `git reset <commit> -- <path>` and the reset-vs-restore distinctionModes · advanced · ~18 min
- 06Reset safety and recovery — when not to use --hard, reflog-based recovery, --merge and --keepSafety · advanced · ~24 min
Part XVI
Restore and Switch
Modern Git command separation introduced in Git 2.23.
- 01The Git 2.23 command split — why git checkout was overloaded and how switch and restore replaced itRestoreSwitch · intermediate · ~18 min
- 02git switch in detail — branch switching, creation, detachment, and orphan branchesRestoreSwitch · intermediate · ~20 min
- 03git restore in detail — restoring files from the index, from HEAD, and from any refRestoreSwitch · intermediate · ~20 min
- 04Restore and the three trees — sources, destinations, and which combinations are validRestoreSwitch · intermediate · ~18 min
- 05Switch versus checkout — when each is appropriate, behaviour differences, and the migration storyRestoreSwitch · intermediate · ~20 min
- 06Migrating team habits — muscle memory, training, CI scripts, and what to update when migratingRestoreSwitch · intermediate · ~22 min
Part XVII
Reflog
Recovery of reset commits, rebases, deleted branches, lost HEAD positions.
- 01What the reflog records — every ref update, every time, with a reasonMechanics · advanced · ~20 min
- 02Reflog locations and scopes — per-ref logs, the .git/logs tree, and enabling logging for tagsMechanics · advanced · ~18 min
- 03Navigation with reflog — @{N}, @{date}, and using reflog as a history of HEADNavigation · advanced · ~22 min
- 04Recovering from a hard reset — the precise reflog recipe and the boundaries of recoveryRecovery · advanced · ~22 min
- 05Recovering from a bad rebase — reflog, ORIG_HEAD, and the cherry-pick recipeRecovery · advanced · ~22 min
- 06Reflog expiry and gc — git reflog expire, gc.reflogExpire, and the choreography with garbage collectionExpiry · advanced · ~22 min
Part XVIII
Git Recovery
Realistic recovery workflows for lost work.
- 01The recovery mindset — stop, inspect, locate, recoverRecovery · advanced · ~22 min
- 02Recovering a deleted branch — the reflog is the recovery pathRecovery · advanced · ~24 minLab
- 03Recovering a dropped stash — git stash list, the reflog, and the .git/logs/refs/stash fileRecovery · advanced · ~22 min
- 04Recovering an amended commit — the previous commit is in the reflogRecovery · advanced · ~22 min
- 05Recovering a commit after a shared rebase — the original is still in your local reflogRecovery · advanced · ~26 min
- 06The recovery decision tree — a flowchart for any "I lost X" scenarioRecovery · advanced · ~26 min
Part XIX
Tags and Releases
Lightweight, annotated, signed tags; release workflows.
- 01Lightweight versus annotated tags — what each stores and why the audit trail differsTags and Releases · intermediate · ~18 min
- 02Creating and listing tags — git tag, -a, -m, -d, -l with patterns, and git tag -nTags and Releases · intermediate · ~18 min
- 03Tag pushing and fetching — why git push does not push tags by default, and what --tags and --follow-tags doTags and Releases · intermediate · ~18 min
- 04Signed tags — git tag -s, git tag -u, and verification with git verify-tagTags and Releases · intermediate · ~20 min
- 05Tag protection and releases — repository settings, release notes, and immutability via signingTags and Releases · intermediate · ~19 min
- 06Release workflows — tag-on-merge, release branches, semantic versioning, release artefacts, and the deploy-after-tag patternTags and Releases · intermediate · ~22 min
Part XX
Remotes
Fetch, push, remote tracking branches, upstream relationships.
- 01What a remote is — a named pointer to another repositoryRemotes · intermediate · ~18 min
- 02Adding and removing remotes — the lifecycle of a remote entryRemotes · intermediate · ~18 min
- 03Remote-tracking branches — the local cache of remote stateRemotes · intermediate · ~18 min
- 04Upstream relationships — the per-branch link to a remoteRemotes · intermediate · ~20 min
- 05Multiple remotes — origin, upstream, and forks in one cloneRemotes · intermediate · ~20 min
- 06Remote pruning and cleanup — keeping the local cache honestRemotes · intermediate · ~18 min
Part XXI
Fetch vs Pull
What each command actually does, when to use which.
- 01What fetch does — downloading remote state into the local cacheFetchVsPull · intermediate · ~18 min
- 02What pull does — fetch plus merge (or fetch plus rebase)FetchVsPull · intermediate · ~18 min
- 03git pull --rebase versus git pull --merge — linear history versus merge commitsFetchVsPull · intermediate · ~18 min
- 04git pull --ff-only — refusing a pull that would require a mergeFetchVsPull · intermediate · ~16 min
- 05Configuring pull to rebase by default — pull.rebase and branch.<name>.rebaseFetchVsPull · intermediate · ~18 min
- 06The IaC and team pull policy — choosing one rule and enforcing itFetchVsPull · intermediate · ~22 min
Part XXII
Force Push
--force vs --force-with-lease, reflog-based safety, Production Warning.
- 01What force push does — overwriting the remote tip with your local tipForcePush · advanced · ~18 min
- 02The destructive default — what `git push --force` actually destroysForcePush · advanced · ~20 min
- 03`git push --force-with-lease` — the safe force-pushForcePush · advanced · ~20 min
- 04The reflog as safety net — what is recoverable after a force-pushForcePush · advanced · ~22 min
- 05Branch protection and force-push — server-side enforcementForcePush · advanced · ~22 min
- 06Force-push incident response — when a teammate has rewritten your workForcePush · advanced · ~22 min
Part XXIII
Worktrees
.git/worktrees mechanism, multiple working trees, infrastructure use cases.
- 01What a worktree is — multiple working trees sharing one .git directoryWorktrees · advanced · ~20 min
- 02Creating and removing worktrees — git worktree add, -b, --detach, --forceWorktrees · advanced · ~21 min
- 03Multiple worktrees and shared git — how .git/ is sharedWorktrees · advanced · ~22 min
- 04Worktrees and branches — same branch in two worktrees; detached HEADWorktrees · advanced · ~21 min
- 05Infrastructure use cases — comparing IaC branches side by side; CI in a worktree; long-running checkoutsWorktrees · advanced · ~22 min
- 06Worktree cleanup and pruning — git worktree prune; stale metadata; the lock fileWorktrees · advanced · ~22 min
Part XXIV
Bisect
Root-cause analysis to find the breaking infrastructure commit.
- 01What bisect does — binary search through commit history for the offending commitBisect · advanced · ~20 min
- 02The binary search mental model — O(log n) and the step counts for typical historiesBisect · advanced · ~22 min
- 03Automated bisect with `git bisect run` — exit codes, test scripts, and the shell wrapperBisect · advanced · ~24 min
- 04Bisect log and visualize — recording, inspecting, and replaying a sessionBisect · advanced · ~18 min
- 05Bisect and build artefacts — finding the commit that broke the buildBisect · advanced · ~22 min
- 06Bisect pitfalls and recovery — flaky tests, dependencies, side effects, and `bisect reset`Bisect · advanced · ~22 minLab
Part XXV
Hooks
Client-side, server-side hooks; limitations and enforcement boundaries.
- 01What Git hooks are — scripts Git invokes at lifecycle eventsHooks · intermediate · ~20 min
- 02Client-side hooks — where they live and how to enable themHooks · intermediate · ~20 min
- 03Pre-commit and pre-push — the two most-used client-side hooksHooks · intermediate · ~22 min
- 04Server-side hooks — pre-receive, update, post-receive, post-commitHooks · intermediate · ~20 min
- 05Hooks and policy enforcement — the limits of client-side controlHooks · intermediate · ~22 min
- 06Hooks and supply chain — secret scanning, dependency review, and the role of hooks versus CIHooks · intermediate · ~22 min
Part XXVI
Git Configuration
Scopes (system/global/local/worktree), identity, signing configuration.
- 01Config scopes — system, global, local, worktree, and where each value livesGitConfig · intermediate · ~18 min
- 02User name and email identity — authorship, DCO, and why real identities matterGitConfig · intermediate · ~16 min
- 03Aliases — what they are, what they cost, and which ones to keepGitConfig · intermediate · ~16 min
- 04Include and conditional configs — one identity per repo, one set of aliases per teamGitConfig · intermediate · ~18 min
- 05Credential helpers and secure storage — what each one stores, where, and at what riskGitConfig · intermediate · ~20 min
- 06Signing configuration — keys, formats, and what production commits and tags should look likeGitConfig · intermediate · ~20 min
Part XXVII
Infrastructure Repository Architecture
Layout for Terraform, Ansible, Kubernetes, network, policy, documentation repos.
- 01IaC repository types — single-tool versus multi-tool repositoriesRepoArch · advanced · ~22 min
- 02Terraform repository layout — modules, environments, and root modulesRepoArch · advanced · ~24 min
- 03Ansible repository layout — roles, playbooks, inventories, and group_varsRepoArch · advanced · ~24 min
- 04Kubernetes repository layout — base plus per-environment, Kustomize versus HelmRepoArch · advanced · ~26 min
- 05Network and policy repositories — separate repositories for network and policy configurationRepoArch · advanced · ~24 min
- 06Documentation and runbook repositories — keeping docs in version control alongside codeRepoArch · advanced · ~22 min
Part XXVIII
Monorepo vs Multi-Repo
Ownership, blast radius, CI performance, access control, dependencies.
- 01The trade-off — coupling versus independence, and what a single commit can affectArchitecture · advanced · ~20 min
- 02Monorepo architecture — one repository, many projectsArchitecture · advanced · ~24 min
- 03Multi-repo architecture — one repository per service or projectArchitecture · advanced · ~23 min
- 04Hybrid and middleware — polyglot repos, submodules, partial clones, and sparse-checkoutArchitecture · advanced · ~26 min
- 05Ownership and access control — CODEOWNERS at the repository and directory levelArchitecture · advanced · ~24 min
- 06The decision criteria — team size, coupling, CI performance, blast radius, security boundaries, and tool supportArchitecture · advanced · ~26 min
Part XXIX
Branching Strategies
Trunk-based, short-lived branches, release branches, GitFlow contextually.
- 01Trunk-based development — committing to the trunk every dayStrategies · advanced · ~22 min
- 02Short-lived feature branches — small commits, frequent merges, and the rebase trade-offStrategies · advanced · ~20 min
- 03Release branches — when stable releases matter and what maintenance costsStrategies · advanced · ~24 min
- 04GitFlow contextually — what it is, when it fits, and why it does not fit modern CIStrategies · advanced · ~22 min
- 05Environment branches — branch per environment and why it is an anti-pattern in GitOpsStrategies · advanced · ~26 min
- 06The team-policy decision — choosing, documenting, enforcing, and changing the branching strategyPolicy · advanced · ~24 min
Part XXX
Pull Requests and Merge Requests
Review, diff, approvals, status checks, ownership, change reasoning.
- 01Pull request fundamentals — proposing, reviewing, mergingFundamentals · intermediate · ~18 min
- 02The diff and the review — what reviewers look at and why small PRs matterReview · intermediate · ~22 min
- 03Approvals and required reviewers — the gate, CODEOWNERS, and the auditApprovals · intermediate · ~21 min
- 04Status checks — the automated gate and the cost of flakinessStatusChecks · intermediate · ~21 min
- 05PR lifecycle and merge strategies — squash, merge commit, and rebaseLifecycle · intermediate · ~23 min
- 06PR quality and best practices — templates, checklists, and the review contractQuality · intermediate · ~20 min
Part XXXI
CODEOWNERS and Ownership Controls
Path-based ownership, required reviewers, bypass risks.
- 01What CODEOWNERS is — a file in the repo that maps paths to ownersOwnership · advanced · ~19 min
- 02Syntax and patterns — the line format, glob rules, and the order trapSyntax · advanced · ~21 min
- 03Team and individual owners — @user, @org/team, and the security boundaryOwners · advanced · ~20 min
- 04CODEOWNERS and required reviews — how forges turn ownership into a gateRequiredReviews · advanced · ~22 min
- 05CODEOWNERS and bypass — who can override the rule and what is left behindBypass · advanced · ~20 min
- 06CODEOWNERS as an operating system — composing ownership, branch protection, and status checksOperatingSystem · advanced · ~22 min
Part XXXII
Protected Branches
Direct-push restrictions, approvals, status checks, bypass risks.
- 01What branch protection is — server-side controls on a branchFoundations · advanced · ~20 min
- 02Direct push restrictions — disallow direct writes, require pull requestsPushRestrictions · advanced · ~22 min
- 03Required approvals and status checks — the merge-block conditionsMergeGates · advanced · ~24 minLab
- 04Bypass and bypass actors — who can override the rule and what is left behindBypass · advanced · ~22 min
- 05Tag protection — preventing tag deletion, restricting tag creation, enforcing signed tagsTagProtection · advanced · ~20 min
- 06Protected branches and policy — branch protection as the enforcement layerPolicy · advanced · ~22 min
Part XXXIII
Commit and Tag Signing
GPG and SSH signing for production verifiability.
- 01Why sign commits — the chain of trust and what signing actually provesSigningFoundations · advanced · ~22 min
- 02GPG signing setup — generating a key, configuring Git, signing with -SGPGSigning · advanced · ~24 min
- 03SSH signing setup — the Git 2.34+ approach using an existing SSH keySSHSigning · advanced · ~22 min
- 04Signing tags versus commits — both can be signed; tags survive rebasesSigningTagsVsCommits · advanced · ~22 min
- 05Verifying signatures — git verify-commit, git verify-tag, --show-signature, and forge UIsVerifyingSignatures · advanced · ~24 minLab
- 06Signing policy and enforcement — branch protection, required signed commits, and the failure modesSigningPolicy · advanced · ~26 min
Part XXXIV
Git Security
SSH, HTTPS tokens, credential storage, permissions, compromised accounts.
- 01Authentication options — SSH vs HTTPS and the trade-offs that decideAuthentication · advanced · ~22 min
- 02SSH keys and deploy keys — personal keys, deploy keys, host keys, and the read-only distinctionSSHKeys · advanced · ~24 min
- 03HTTPS tokens and personal access tokens — PATs, fine-grained tokens, and OAuth appsHTTPSTokens · advanced · ~24 min
- 04Credential storage and rotation — where the credential lives, how often it changes, and the leak surfaceCredentialStorage · advanced · ~26 min
- 05The compromised account — what happens, what to do first, and how to contain the blastIncidentResponse · advanced · ~26 min
- 06The least-privilege credential — scoping tokens to minimum scope, ephemeral credentials, and the principleLeastPrivilege · advanced · ~24 min
Part XXXV
Secrets in Git
Removing from current file does not remove from history; detection, rotation, cleanup.
- 01The secret leak fallacy — why deleting the file does not delete the secretMentalModel · advanced · ~22 min
- 02Detection with secret scanning — gitleaks, truffleHog, and the CI gateDetection · advanced · ~24 minLab
- 03The rotation response — rotate first, then clean history, the order that survives the incidentIncidentResponse · advanced · ~26 min
- 04History cleanup tools — git filter-repo, BFG, and the limits of the rewriteRemediation · advanced · ~26 min
- 05Forks, clones, and mirrors — the persistence of leaked secrets and the impossibility of perfect recallForensics · advanced · ~25 min
- 06Prevention by design — pre-commit hooks, CI gates, and secrets that never reach the repositoryPrevention · advanced · ~28 min
Part XXXVI
Git History Rewriting
git filter-repo, BFG, scrubbing, re-signing, force-push blast radius.
- 01git filter-repo — the modern replacement for git filter-branchTools · advanced · ~22 min
- 02BFG Repo-Cleaner — the fast credential scrubberTools · advanced · ~22 min
- 03Removing files from history — when a path must not existOperations · advanced · ~24 min
- 04Replacing content — when a string must change across historyOperations · advanced · ~26 min
- 05Re-signing after rewrite — restoring the chain of trustOperations · advanced · ~24 min
- 06The force-push aftermath — communication, coordination, auditOperations · advanced · ~28 min
Part XXXVII
CI Fundamentals
Commit to trigger to runner to job to steps to result.
- 01What CI is and is not — automation, not gatekeepingCI Fundamentals · foundation · ~18 min
- 02The trigger to result pipeline — what fires a CI runCI Fundamentals · foundation · ~17 min
- 03The runner and its environment — hosted, self-hosted, ephemeral, persistentCI Fundamentals · foundation · ~19 min
- 04Jobs and steps — the units of work and how they relateCI Fundamentals · foundation · ~18 min
- 05Status checkout — what gets reported back, and who reads itCI Fundamentals · foundation · ~17 min
- 06CI versus the developer laptop — why "it works on my machine" is the bugCI Fundamentals · foundation · ~18 min
Part XXXVIII
CI Architecture
Control plane, runners, jobs, environments, artifacts, caches, credentials.
- 01The three-plane model — control plane, runner, and environmentCI Architecture · foundation · ~20 min
- 02Control plane isolation — why orchestration is separate from executionCI Architecture · foundation · ~22 min
- 03Runner network and internet — egress controls, private runners, and the cloud-only caseCI Architecture · foundation · ~22 min
- 04Jobs and concurrency — concurrency groups, cancel-in-progress, and queue limitsCI Architecture · foundation · ~22 min
- 05Environment variables and config — secrets, env, vars, and the scopes that bind themCI Architecture · foundation · ~22 min
- 06Artifacts, caches, and outputs — three distinct mechanisms for moving data through a jobCI Architecture · foundation · ~24 min
Part XXXIX
Pipelines
Stages, jobs, dependencies and parallelism semantics.
- 01Pipeline as code — the workflow file is committedPipelines · intermediate · ~20 min
- 02Stages and jobs — the two-level hierarchy and when each model appliesPipelines · intermediate · ~22 min
- 03Job dependencies and DAG — needs, requires, dependencies, fan-in, fan-outPipelines · intermediate · ~22 minLab
- 04Parallel execution and fan-out — matrix builds, the use case, and the costPipelines · intermediate · ~22 min
- 05Pipeline status and observability — what the run page shows and how to read the logsPipelines · intermediate · ~20 min
- 06Reusable workflows — DRY at the workflow level, what they enable, what they costPipelines · intermediate · ~22 min
Part XL
Runners
Hosted, self-hosted, ephemeral, persistent, isolation models.
- 01Hosted runners — convenience, isolation, and the control you give upRunners · intermediate · ~18 min
- 02Self-hosted runners — control, operational cost, and the security costRunners · intermediate · ~22 minLab
- 03Ephemeral runners — clean state every job, and the cost of throwing away stateRunners · intermediate · ~20 min
- 04Runner autoscaling and Actions Runner Controller — scaling on KubernetesRunners · advanced · ~24 min
- 05Runner labels and selection — matching workflows to runners, and the trust modelRunners · intermediate · ~20 min
- 06Runner tooling and actions — what is installed, GitHub-managed actions, and the marketplaceRunners · intermediate · ~21 min
Part XLI
Runner Security
Threat model: arbitrary code, production credentials, Docker socket, privileged containers.
- 01The runner threat model — who attacks, how, and with what accessThreatModel · advanced · ~22 min
- 02Arbitrary code execution — every CI run executes attacker-controlled code if the trigger is a PR from outsideCodeExecution · advanced · ~24 min
- 03Production credentials on runners — why long-lived credentials on shared runners are catastrophicCredentials · advanced · ~23 min
- 04The Docker socket risk — docker.sock mounted into a runner = root on the host; the escalation pathDockerSocket · advanced · ~26 min
- 05Privileged containers and host mounts — what privileged means; the kernel surfacePrivilegedContainers · advanced · ~24 min
- 06Persistence and lateral movement — what happens after the initial compromise; how to containPersistence · advanced · ~25 min
Part XLII
CI Secrets
Secret variables, masking limitations, log leakage, environment scope.
- 01Secret variables fundamentals — how CI platforms store and serve secretsSecrets · advanced · ~20 min
- 02Masking and its limits — what the log masker catches and what it does notSecrets · advanced · ~22 min
- 03Log leakage risks — failure modes that bypass the maskerSecrets · advanced · ~23 min
- 04Environment scopes — repository, environment, and organisation granularitySecrets · advanced · ~22 min
- 05Secret rotation cadence — when to rotate, what triggers rotation, and the disciplineSecrets · advanced · ~22 min
- 06The short-lived credential ideal — OIDC, dynamic secrets, and the end of long-lived keysSecrets · advanced · ~24 min
Part XLIII
OIDC and Short-Lived Credentials
OIDC federation from CI to cloud, no long-lived production credentials.
- 01Why long-lived credentials fail — rotation cost, leak surface, blast radiusFoundations · advanced · ~24 min
- 02OIDC federation basics — what OIDC is; the trust relationship between CI and cloudFoundations · advanced · ~26 min
- 03GitHub Actions OIDC in practice — id-token: write permission; the JWT issuanceGitHub · advanced · ~25 min
- 04OIDC in AWS — provider, audience, role, trust policy; aws-actions/configure-aws-credentialsAWS · advanced · ~28 min
- 05OIDC in Azure and GCP — Workload Identity Federation; the federation poolAzureGCP · advanced · ~27 min
- 06OIDC trust policy deep dive — sub claims, job_workflow_ref claims, the immutable subject claims changeTrustPolicy · advanced · ~28 minLab
Part XLIV
Artifacts
Build outputs, Terraform plans, packages, reports, images, manifests.
- 01What an artifact is — the output of a job, named and stored for laterFoundations · intermediate · ~18 min
- 02Build outputs and binary artefacts — what gets uploaded, the upload limits, the retentionBuildOutputs · intermediate · ~20 min
- 03Terraform plans as artifacts — the plan file as a review surface, plans across jobsTerraformPlans · intermediate · ~22 min
- 04Reports and junit — test results, coverage, scan results as structured artifactsReports · intermediate · ~20 min
- 05Images and manifests — OCI image artifacts, manifest artifacts, the production patternImagesAndManifests · intermediate · ~22 min
- 06Artifact retention and storage — retention policies, the cost, the production rulesRetentionAndStorage · intermediate · ~20 min
Part XLV
Artifact Immutability
Build once, promote the same artifact across environments.
- 01The immutable identity principle — every artifact has a content-addressed identityFoundations · advanced · ~22 min
- 02Digests and content-addressing — sha256:abc..., the artifact’s true nameContent Addressing · advanced · ~24 min
- 03Promotion across environments — same artifact, different environmentsPromotion · advanced · ~23 min
- 04The build versus rebuild trap — why rebuilding per environment destroys provenanceBuild Integrity · advanced · ~26 min
- 05Immutable tags and digest pinning — why :latest is a contract that resolves to whoever pushes lastPinning · advanced · ~25 min
- 06Provenance and the build identity — SLSA, attestations, and the chain from source to bytesProvenance · advanced · ~26 minLab
Part XLVI
Caching
Performance plus cache-poisoning and stale-cache risks; cache versus artifact.
- 01What a cache is — a content-addressed, key-matched, best-effort blob storeFoundations · intermediate · ~18 min
- 02Cache versus artifact — best-effort acceleration versus durable recordFoundations · intermediate · ~20 min
- 03actions/cache@v4 — inputs, behaviour, and a real workflowCaching mechanisms · intermediate · ~20 min
- 04Cache keys and restore keys — exact match, prefix fallback, partial reuseCaching mechanisms · intermediate · ~20 min
- 05Cache poisoning and staleness — the failure modes of trusting a cacheFailure modes · advanced · ~22 min
- 06Cache cost and retention — what caches cost, how they are evicted, and when to delete themOperational hygiene · intermediate · ~22 min
Part XLVII
Pipeline Dependencies
Actual DAG and stage semantics of the primary CI platform.
- 01The pipeline as a graph — why DAG, not stages, is the right mental modelFoundations · intermediate · ~20 min
- 02needs and depends-on — declaring edges between jobsDeclaration · intermediate · ~20 min
- 03Fan-in and fan-out — parallelism at job boundariesTopology · intermediate · ~20 min
- 04Pipeline triggers and chains — workflow_run and workflow_callComposition · intermediate · ~20 min
- 05Outputs as inputs — the typed contract between jobsDataflow · intermediate · ~20 min
- 06Pipeline failure propagation — what happens when a dependency failsFailure modes · intermediate · ~22 min
Part XLVIII
Conditional Execution
Branch, path, tag, environment conditions, expressions, matrix.
- 01Conditional fundamentals — when to skip, when to run, and the cost of always-runningGuards · intermediate · ~18 min
- 02Branch and path filters — narrowing triggers by branch name and changed filesTriggers · intermediate · ~20 min
- 03Tag and environment conditions — controlling which events touch which environmentsTriggers · intermediate · ~20 min
- 04Expressions and context — `${ }`, `github.event`, `github.ref`, and the operatorsExpressions · intermediate · ~20 min
- 05Matrix strategies — when a matrix is right, when it is overused, and the cardinality costExpansion · intermediate · ~20 min
- 06Environment protection rules — required reviewers, wait timers, and branch restrictionsProtection · intermediate · ~21 min
Part XLIX
Infrastructure CI
Format, lint, static analysis, security, tests, plan/diff, review.
- 01The infrastructure pipeline pattern — eight stages from commit to auditInfrastructure CI · intermediate · ~22 minLab
- 02Format stage — terraform fmt, ansible-lint format, kubeconformInfrastructure CI · intermediate · ~20 min
- 03Lint and static analysis — tflint, ansible-lint, kubeconform, conftest, OPAInfrastructure CI · intermediate · ~24 min
- 04Security scanning — tfsec, checkov, trivy, kics, snykInfrastructure CI · intermediate · ~26 min
- 05Test and validate — terratest, Molecule, kyverno tests and the cost of testingInfrastructure CI · intermediate · ~24 min
- 06Plan and review — terraform plan as the review artefact; the comment-on-PR patternInfrastructure CI · intermediate · ~22 min
Part L
Terraform CI
fmt, validate, lint, security, tests, plan-as-artifact, reviewed plan.
- 01The Terraform CI discipline — why plan-on-PR is the right patternFoundations · intermediate · ~24 min
- 02fmt and validate — what Terraform built-ins catch and what they do notFormatAndValidate · intermediate · ~22 min
- 03tflint and fmt deep — the .tflint.hcl ruleset and what fmt should have caughtLint · intermediate · ~26 min
- 04tfsec and checkov — what security scanners actually check, and the false positive rateSecurityScanning · intermediate · ~28 min
- 05Terratest and integration tests — Go-based testing of real infrastructureIntegrationTests · intermediate · ~26 min
- 06Plan as artifact and PR comment — saving the plan, posting it, and the review contractPlanArtifact · intermediate · ~26 minLab
Part LI
Ansible CI
YAML lint, ansible-lint, syntax checks, Molecule, staged validation.
- 01The Ansible CI discipline — what "tested" means for AnsibleFoundations · intermediate · ~24 min
- 02YAML and playbook linting — yamllint and ansible-lint as the first gateFormatAndValidate · intermediate · ~22 min
- 03ansible-lint and FQCN rules — fully qualified collection names as a conventionFormatAndValidate · intermediate · ~23 min
- 04Ansible playbook syntax check — what --syntax-check proves and what it does notSyntaxCheck · intermediate · ~22 min
- 05Molecule and integration testing — scenarios, drivers, and the verify stageMoleculeAndIntegration · intermediate · ~26 min
- 06Staged validation and idempotency — check mode, diff mode, and the production patternStagedValidation · intermediate · ~26 minLab
Part LII
Kubernetes CI
Manifests, Helm and Kustomize validation, policy, security scans.
- 01The Kubernetes CI discipline — render, validate, packageFoundations · intermediate · ~24 min
- 02Manifest validation with kubeconform — schemas, strict mode, version pinningManifestValidation · intermediate · ~24 minLab
- 03Helm and Kustomize validation — lint, template, and buildTemplateValidation · intermediate · ~26 min
- 04Policy with Conftest and Kyverno — Rego and CEL, and what policy catchesPolicy · intermediate · ~26 min
- 05Security scanning with Trivy and Kubescape — vulnerabilities and misconfigurationsSecurityScanning · intermediate · ~24 min
- 06Render and package as OCI — the artifact handoff to the GitOps controllerPackageAndPublish · intermediate · ~24 min
Part LIII
Container CI
Build, tests, SBOM, scanning, signing, immutable digests.
- 01The container supply chain — source to registryContainer CI · intermediate · ~24 min
- 02BuildKit and the build cacheContainer CI · intermediate · ~26 min
- 03Multi-stage builds and distroless imagesContainer CI · intermediate · ~25 min
- 04Image testing in CIContainer CI · intermediate · ~25 min
- 05SBOM generation in CIContainer CI · intermediate · ~24 min
- 06Image signing in CIContainer CI · intermediate · ~26 min
Part LIV
Infrastructure Testing Strategy
Static, unit, integration, staging, production validation.
- 01The testing pyramid for IaC — five layers and what each one costsTestingPyramid · advanced · ~26 min
- 02Static checks and policy — the cheapest layer and what it catchesStaticAndPolicy · advanced · ~24 min
- 03Unit and module tests — terraform test and Molecule in the pipelineUnitAndModule · advanced · ~25 min
- 04Disposable integration tests — ephemeral environments and what they catchDisposableIntegration · advanced · ~26 min
- 05Staging and production validation — the final layer and what it should catchStagingAndProd · advanced · ~24 min
- 06The test strategy decision — choosing depth against the blast radiusTestStrategy · advanced · ~26 min
Part LV
Continuous Delivery versus Continuous Deployment
The actual distinction and when each fits.
- 01Continuous Delivery vs Continuous Deployment — the actual distinctionDefinitions · intermediate · ~19 min
- 02Continuous integration recap — the foundation and its limitsCIRecap · intermediate · ~20 min
- 03Continuous delivery requires approval — what the gate meansApprovalGate · intermediate · ~21 min
- 04Continuous deployment — no approval, what that impliesNoApproval · intermediate · ~22 min
- 05When deployment without approval fails — failure modes and incident classesFailureModes · intermediate · ~21 min
- 06The decision framework — choosing between continuous delivery and continuous deploymentDecisionFramework · intermediate · ~20 min
Part LVI
Deployment Environments
Development, test, staging, production, identity isolation.
- 01Environments and promotion — the model and the boundaries between environmentsEnvironments · intermediate · ~20 min
- 02Development environment — fast feedback and the failure modes that are acceptableDevelopment · intermediate · ~18 min
- 03Test and staging environments — closer to production and the data questionTestAndStaging · intermediate · ~20 min
- 04Production environment — the boundary and what production means in this courseProduction · intermediate · ~21 min
- 05Identity isolation per environment — separate OIDC identities and the blast-radius disciplineIdentityIsolation · intermediate · ~22 min
- 06Ephemeral and preview environments — per-PR environments and the costEphemeralEnvs · intermediate · ~20 min
Part LVII
Approval Gates
When human approval adds safety and when it adds bureaucracy.
- 01When approval adds safety — the scenarios where a human checkpoint prevents real incidentsWhenApprovalHelps · intermediate · ~19 min
- 02When approval adds bureaucracy — the scenarios where a gate is theatreWhenApprovalHarms · intermediate · ~18 min
- 03Protected environments and required reviewers — the platform-side mechanism that enforces the gateProtectedEnvs · intermediate · ~21 min
- 04Pull request approvals — N approvals, CODEOWNERS, dismiss stale, the auditPRApprovals · intermediate · ~20 min
- 05Multi-party approval and segregation of duties — financial-grade controls and when they matterMultiParty · advanced · ~22 min
- 06Approval fatigue and bypass risks — the failure mode and the warning signsFatigueAndBypass · advanced · ~21 min
Part LVIII
Deployment Strategies
Rolling, canary, blue/green, recreate.
- 01The deployment pattern taxonomy — five patterns, four trade-off axesTaxonomy · intermediate · ~22 min
- 02Rolling update — incremental replacement, surge and unavailabilityRollingUpdate · intermediate · ~21 min
- 03Canary and progressive delivery — traffic splitting, metric-based promotionCanary · intermediate · ~26 min
- 04Blue-green deployment — two environments, atomic switch, instant rollbackBlueGreen · intermediate · ~24 min
- 05Recreate deployment — the downtime cost and the cases that justify itRecreate · intermediate · ~20 min
- 06Choosing a strategy — the decision matrix and the production disciplineChoosing · intermediate · ~25 min
Part LIX
Rollback
Per-artifact rollback across containers, Kubernetes, Terraform, configuration, databases.
- 01Rollback across artifact boundaries — the five mechanisms and what each can undoBoundaries · advanced · ~24 min
- 02Application rollback — promoting the previous digest, the registry as the source of truthContainer · advanced · ~23 min
- 03Kubernetes rollback via Deployment history — kubectl rollout undo and the revision modelKubernetes · advanced · ~22 min
- 04Terraform rollback via state and applied — terraform state list and the targeted applyTerraform · advanced · ~25 min
- 05Configuration management rollback — Ansible idempotency and the next-run restorationConfigMgmt · advanced · ~22 min
- 06Database rollback and the data question — forward-fix vs backward-restore, the migration disciplineDatabase · advanced · ~26 min
Part LX
Forward Fix versus Rollback
Operational decision-making between the two.
- 01The decision framework — what makes rollback safe and what makes forward-fix the only optionDecisionFramework · advanced · ~20 min
- 02When rollback is the right answer — config regressions, deployment bugs, image issuesWhenRollback · advanced · ~18 min
- 03When forward-fix is the right answer — schema migrations, breaking changes, data issuesWhenForwardFix · advanced · ~22 min
- 04The decision cost and time — MTTR trade-offs and the production disciplineCostAndTime · advanced · ~20 min
- 05Rollback and data integrity — when rollback cannot be undone and the cascading data effectsDataIntegrity · advanced · ~22 min
- 06Post-rollback investigation — the audit trail, the fix-forward, and the lessonPostRollback · advanced · ~20 min
Part LXI
Pipeline Failure Handling
Retries, cleanup, partial deployment, resumability, idempotency.
- 01The failure types — flaky tests, real failures, infrastructure failures, race conditionsFailureClassification · intermediate · ~20 min
- 02Retries and backoff — automatic retry vs manual retry, and the exponential backoff patternRetryPolicy · intermediate · ~21 min
- 03Cleanup on failure — the cleanup path when a job fails midwayCleanupPath · intermediate · ~19 min
- 04Partial deployment and resumability — when a deploy gets four of five changes donePartialDeploy · intermediate · ~22 min
- 05Idempotency and the safe retry — why retry only works if the operation is idempotentIdempotency · advanced · ~21 min
- 06The postmortem and the fix — from a failed pipeline to a fix-forwardPostmortem · advanced · ~22 min
Part LXII
Concurrency
Concurrent deployments, environment locking, Terraform state locks, serialization.
- 01Concurrent deployments and isolation — what "concurrent" means and the failure modesConcurrentDeploy · advanced · ~20 min
- 02Environment locking and mutexes — concurrency groups, cancel-in-progress, and the implementationEnvLock · advanced · ~22 min
- 03Terraform state locking — why state lock is mandatory; backend lock typesStateLock · advanced · ~24 min
- 04Concurrency limits and throttling — runner concurrency, queue depth, and the queue effectThrottle · advanced · ~22 min
- 05Queueing and serialization — when to serialise a deploy and the cost it carriesSerialize · advanced · ~22 min
- 06The concurrency discipline — when to allow concurrency, when to prevent itDiscipline · advanced · ~22 min
Part LXIII
CI/CD Observability
Queue duration, runtime, success/failure, flaky jobs, deployment success metrics.
- 01The CI observability question — what gets measured, what doesn't, and the failure modesFoundations · intermediate · ~22 min
- 02Queue and runtime metrics — what they reveal and the alert thresholds that matterRuntimeMetrics · intermediate · ~20 min
- 03Success rate and flake rate — the distinction and how to interpret a 5% flake rateSuccessFlake · intermediate · ~22 min
- 04Deployment frequency and lead time — the first pair of DORA metrics and what they meanDORA · intermediate · ~24 min
- 05Change failure rate and MTTR — the second pair of DORA metrics and how to interpret themDORA · intermediate · ~22 min
- 06Observability without employee ranking — the ethical boundary and what metrics actually measureEthics · intermediate · ~22 min
Part LXIV
Auditability
Which commit, pipeline, artifact, approver, environment, tests, deployment.
- 01The audit chain — the six links between a commit and a running serviceFoundations · intermediate · ~22 min
- 02The deployment claim — what the record asserts and what it omitsFoundations · intermediate · ~22 min
- 03The change question — who, what, why, when, where, and howFoundations · intermediate · ~24 min
- 04Deploy evidence and provenance — artefact identity and the chain to sourceProvenance · intermediate · ~24 minLab
- 05The deployment receipt — what the audit-grade record containsReceipt · intermediate · ~24 min
- 06Six months later — reconstruction as the test of an audit trailReconstruction · intermediate · ~24 min
Part LXV
Software Supply Chain Security
Source, dependencies, CI, artifact, registry, deployment as trust boundaries.
- 01The supply chain trust boundaries — six stages, each with a threat modelThreatModel · advanced · ~24 min
- 02Source trust and repository attestation — branch protection, signed commits, the trust chainSourceTrust · advanced · ~26 min
- 03Dependency trust and the attack surface — what is pulled in, what could be maliciousDependencyTrust · advanced · ~28 min
- 04CI trust and the runner as an actor — the runner is an attacker if compromisedCITrust · advanced · ~26 min
- 05Artifact trust and content-addressing — digests, signing, the registry as trust storeArtifactTrust · advanced · ~25 min
- 06Deployment trust and the runtime boundary — what happens when an artifact reaches productionDeploymentTrust · advanced · ~27 min
Part LXVI
Third-Party Actions and Plugins
Mutable references, compromised maintainers, abandoned projects, unexpected updates.
- 01Third-party actions are code — they execute on the runnerRisk · advanced · ~22 min
- 02Mutable references and the tag-swap attackRisk · advanced · ~23 minLab
- 03Compromised maintainers and the supply-chain attackRisk · advanced · ~25 min
- 04Abandoned actions and the frozen actorRisk · advanced · ~22 min
- 05Pinning to commit SHA — the only safe referenceDefence · advanced · ~26 min
- 06Allowlisting and policy — controlling which actions are permittedDefence · advanced · ~26 min
Part LXVII
Dependency Pinning
Actions, plugins, containers, providers, modules, collections, packages.
- 01The pinning discipline — why mutable references are a vulnerabilityDiscipline · advanced · ~24 min
- 02Action and plugin pinning — GitHub Actions, GitLab CI, Jenkins pluginsCIPinning · advanced · ~26 min
- 03Container image pinning — digests over tagsImagePinning · advanced · ~24 min
- 04Terraform provider and module pinning — version constraints and the registry lockIacPinning · advanced · ~26 min
- 05Ansible collection and role pinning — requirements.yml with version constraintsConfigPinning · advanced · ~24 min
- 06Package pinning and lockfiles — npm shrinkwrap, pip-tools, go.sum, Cargo.lockPackageLockfiles · advanced · ~26 min
Part LXVIII
SBOM
Purpose, generation (syft, cyclonedx-bom, actions/attest), consumption.
- 01What an SBOM is — the bill of materials for softwareSBOMFoundations · intermediate · ~20 min
- 02SPDX and CycloneDX — the two formats, the trade-offs, the toolingFormats · intermediate · ~22 min
- 03SBOM generation in CI — syft, cyclonedx-bom, cdxgenGeneration · intermediate · ~24 min
- 04SBOM distribution and attestation — SBOM as an in-toto attestationDistribution · intermediate · ~22 min
- 05Vulnerability matching against SBOMs — VEX, Grype, TrivyVulnerabilityMatching · intermediate · ~22 min
- 06SBOM as an operational input — incident response, license audit, dependency changeOperationalization · intermediate · ~22 minLab
Part LXIX
Artifact Signing
Cosign v3 keyless signing, Fulcio, Rekor, Bundle format.
- 01Why sign artifacts — the supply chain integrity argumentFoundations · advanced · ~22 min
- 02Cosign and the Sigstack — what cosign does, the broader Sigstore ecosystemSigstore · advanced · ~24 min
- 03Keyless signing with Fulcio — OIDC-issued ephemeral keysKeyless · advanced · ~26 min
- 04Self-managed keys and KMS — when to use your own keys, KMS integrationKeypair · advanced · ~26 min
- 05Rekor and the transparency log — what Rekor does, the public logTransparency · advanced · ~24 min
- 06Verify on deploy — the cluster admission controller, policy-controllerVerification · advanced · ~26 min
Part LXX
Provenance
Where did this artifact come from; SLSA v1.2 Build track.
- 01What provenance is — the attestation of where an artifact came fromFoundations · advanced · ~22 min
- 02SLSA build levels — L0 through L3 and what each level guaranteesBuildTrack · advanced · ~24 min
- 03in-toto attestations — the standard format and predicate typesEnvelopes · advanced · ~22 min
- 04SLSA source track — source control integrity and the producer side of provenanceSourceTrack · advanced · ~24 min
- 05GitHub Actions artifact attestations — actions/attest and the platform-native provenanceGitHub · advanced · ~26 min
- 06Consuming and verifying attestations — the verifier side and the policyVerify · advanced · ~24 min
Part LXXI
CI/CD Threat Modelling
Malicious commit, account compromise, dependency compromise, runner compromise, secret leakage, artifact substitution, registry compromise.
- 01The CI/CD threat model — who attacks, what they want, how they get inThreatModel · advanced · ~24 min
- 02The malicious commit attack — the insider or compromised PR scenarioAttack · advanced · ~24 min
- 03The account-compromise attack — the stolen-credentials scenarioAttack · advanced · ~25 min
- 04The dependency-compromise attack — the upstream-package scenarioAttack · advanced · ~25 min
- 05The runner-compromise attack — the persistent-access scenarioAttack · advanced · ~25 min
- 06The secret-leak and registry-compromise attack — credential-exfiltration scenariosAttack · advanced · ~25 min
Part LXXII
GitOps Foundations
Git to desired state to reconciliation controller to environment to drift detection.
- 01The GitOps principles — declarative, versioned, pulled, reconciledFoundations · foundation · ~18 min
- 02Declarative desired state — describing what should be, not how to get thereFoundations · foundation · ~17 min
- 03Versioned and immutable — Git as the canonical record of desired stateFoundations · foundation · ~18 min
- 04Pulled automatically — the controller reaches out to GitFoundations · foundation · ~18 min
- 05Continuously reconciled — observed versus desired, and the loopFoundations · foundation · ~19 min
- 06GitOps versus traditional CD — the push model, the pull model, and the trust differenceFoundations · foundation · ~20 min
Part LXXIII
Push versus Pull Deployment
Trust differences between CI pushing and controller pulling.
- 01The push model — CI holds credentials and reaches out to the clusterFoundations · advanced · ~20 min
- 02The pull model — a controller inside the cluster reaches out to GitFoundations · advanced · ~20 min
- 03Credential boundaries — where the secrets live in each modelSecurity · advanced · ~22 min
- 04Blast radius — what a CI compromise affects, what a controller compromise affectsSecurity · advanced · ~22 min
- 05Hybrid architectures — when neither the pure push nor the pure pull model fitsPatterns · advanced · ~22 min
- 06The trust decision — choosing the right model for your organisationDecision · advanced · ~22 min
Part LXXIV
Reconciliation
Continuously reconciling Git desired state to actual cluster state.
- 01The reconciliation loop — observed, desired, difference, actionMechanics · advanced · ~22 min
- 02Observed versus desired — what "actual" and "what should be" meanMechanics · advanced · ~21 min
- 03Reconciliation intervals — how often, and the trade-offsMechanics · advanced · ~23 min
- 04Argo CD reconciliation mechanics — the three components, the cache, the diffTools · advanced · ~23 min
- 05Flux reconciliation mechanics — GitRepository, Kustomization, the source controllerTools · advanced · ~24 min
- 06Failure modes in reconciliation — what stops the loop, and how to detect itReliability · advanced · ~24 minLab
Part LXXV
Drift
Manual, accidental, emergency changes; reconciliation, alerting on drift.
- 01What drift is — the actual diverging from the desiredDrift · advanced · ~22 min
- 02Manual drift — the operator edits the cluster directlyDrift · advanced · ~21 min
- 03Accidental drift — controllers, schedulers, and side effectsDrift · advanced · ~23 min
- 04Emergency drift — when incident response breaks the modelDrift · advanced · ~24 min
- 05Drift detection and alerting — what metrics show drift and what the alerts look likeDrift · advanced · ~22 minLab
- 06Self-heal versus control — when automatic reconciliation fights the operatorDrift · advanced · ~24 min
Part LXXVI
GitOps Repository Architecture
Application repos, environment repos, monorepo vs multi-repo, overlays, promotion.
- 01Application versus environment repositories — the two-repo patternRepo Models · advanced · ~22 min
- 02Monorepo with overlays — Kustomize and Helm values in one treeRepo Models · advanced · ~24 min
- 03Multi-repo per environment — dev, staging, prod each their own repoRepo Models · advanced · ~23 min
- 04Source Hydrator and the mirror — Argo CD sources that are not the application repoHydration · advanced · ~24 min
- 05Promotion models — promote the immutable artifact vs promote the Git refPromotion · advanced · ~23 min
- 06The architecture decision — when each model fitsDecision · advanced · ~23 min
Part LXXVII
Argo CD
Application, source, destination, sync, health, projects, RBAC, repositories, ApplicationSets.
- 01Argo CD architecture — the three components and the data flowArchitecture · advanced · ~26 minLab
- 02The Application CRD — source, destination, sync, and the resource modelCRD · advanced · ~25 min
- 03Source types and Helm/Kustomize — directory, repo, helm, kustomize, pluginSources · advanced · ~27 min
- 04Sync policies and sync windows — automated, manual, prune, and the time-bound gateSync · advanced · ~28 min
- 05Projects and RBAC — the multi-tenant boundary and the policy CSVMultitenancy · advanced · ~27 min
- 06ApplicationSet and cluster generation — one resource, many ApplicationsApplicationSet · advanced · ~28 min
Part LXXVIII
Flux
GitRepository, Kustomization, HelmRelease, OCIRepository, image automation, notifications.
- 01The Flux architecture — the toolkit composition and the controller modelArchitecture · advanced · ~26 min
- 02GitRepository and source-controller — the source of desired stateSource · advanced · ~25 min
- 03Kustomization controller — reconciling Kustomize manifests into the clusterKustomize · advanced · ~27 min
- 04HelmRelease controller — reconciling Helm charts with versioned valuesHelm · advanced · ~27 min
- 05Image automation and update — scanning registries, filtering tags, writing back to GitImage · advanced · ~26 min
- 06Notification controller and webhooks — the alerting layerNotification · advanced · ~25 min
Part LXXIX
Sync Strategies
Manual sync, automated sync, self-heal, pruning - per controller capability.
- 01Manual sync — the default, the audit, and the discipline of waitingSyncStrategies · advanced · ~22 min
- 02Automated sync — the convenience and the controls it requiresSyncStrategies · advanced · ~24 min
- 03Self-heal — when automatic correction is right and when it is wrongSyncStrategies · advanced · ~23 min
- 04Prune and the blast radius — what prune deletes and the safety disciplineSyncStrategies · advanced · ~26 min
- 05Sync waves and phasing — ordering, dependencies, and the wave annotationSyncStrategies · advanced · ~25 min
- 06Replace, force, and server-side apply — the options and their consequencesSyncStrategies · advanced · ~25 min
Part LXXX
GitOps Pruning
Desired-state deletion and blast radius; Production Warning.
- 01What prune is — Git desired state deletes cluster actualGitOpsPruning · advanced · ~22 min
- 02Prune versus orphan — the two failure modes for absent manifestsGitOpsPruning · advanced · ~24 min
- 03Orphaned resources and the cluster — what survives when the manifest disappearsGitOpsPruning · advanced · ~25 min
- 04Prune safety mechanisms — dry-run, sandbox clusters, and the escape hatchGitOpsPruning · advanced · ~23 min
- 05Incident — a prune deleted production — the recovery procedureGitOpsPruning · advanced · ~26 min
- 06Prune policy decision framework — when to allow prune, when to forbid itGitOpsPruning · advanced · ~24 min
Part LXXXI
Synced versus Healthy
Reconciliation is not the same as application health.
- 01What Synced means — desired state matches actual stateSyncedVsHealthy · advanced · ~20 min
- 02What Healthy means — the workload is functioning correctlySyncedVsHealthy · advanced · ~21 min
- 03The Synced and Healthy matrix — four combinationsSyncedVsHealthy · advanced · ~22 min
- 04Progressing and Degraded states — the intermediate statesSyncedVsHealthy · advanced · ~19 min
- 05The 3 AM test — what tells you the workload is broken when the dashboard is greenSyncedVsHealthy · advanced · ~22 min
- 06When Synced is not Healthy — the failure modes the platform does not catchSyncedVsHealthy · advanced · ~22 min
Part LXXXII
GitOps Secrets
External secret systems, encrypted Git workflows, secret references.
- 01The GitOps secret problem — why plaintext credentials cannot live in GitMentalModel · advanced · ~22 min
- 02External secret systems — Vault, cloud KMS, and the controller that bridges themExternalSystems · advanced · ~24 min
- 03Encrypted Git workflows — encrypt the value, leave the keys elsewhereEncryptedAtRest · advanced · ~23 min
- 04Bitnami Sealed Secrets — cluster-bound encryption and the controller as the trust boundaryEncryptedAtRest · advanced · ~25 min
- 05SOPS and Mozilla SOPS — file-level encryption for the GitOps repositoryEncryptedAtRest · advanced · ~26 min
- 06The secret reference pattern — what goes in Git, what never shouldReferencePattern · advanced · ~22 min
Part LXXXIII
GitOps RBAC
Repository permissions, controller permissions, cluster access, environment boundaries.
- 01The GitOps RBAC model — repository, controller, and cluster as three layersRBACModel · advanced · ~24 min
- 02Repository permissions — the merge is the deployRepositoryLayer · advanced · ~23 min
- 03Controller cluster permissions — what the reconciler is allowed to doControllerLayer · advanced · ~26 min
- 04Argo CD RBAC in detail — projects, policy rows, and the Casbin modelArgoCDRBAC · advanced · ~26 min
- 05Flux multi-tenancy — lockdown flags and the per-namespace modelFluxTenancy · advanced · ~25 min
- 06Environment boundaries — dev, staging, and production as separate concernsEnvironmentBoundaries · advanced · ~24 min
Part LXXXIV
Environment Promotion
Development, test, staging, production with immutable artifact promotion.
- 01Promotion by artifact — the same digest moves through environmentsPromotion models · advanced · ~23 min
- 02Promotion by Git ref — the Git reference moves; the artefact is built per environmentPromotion models · advanced · ~24 min
- 03Promotion by environment repo — each environment has its own Git statePromotion models · advanced · ~24 min
- 04Promotion by ApplicationSet — programmatic generation of promotion targetsPromotion models · advanced · ~25 min
- 05Promotion windows and approvals — the time-bound gatesPromotion controls · advanced · ~26 min
- 06The promotion decision — which model fits which organisationPromotion decision · advanced · ~26 min
Part LXXXV
GitOps Rollback
git revert is not the same as data rollback.
- 01Git revert versus controller rollback — what Git undoes and what the controller undoesFoundations · advanced · ~22 min
- 02Data rollback versus state rollback — the two meanings of "rollback" for an infrastructure changeDefinitions · advanced · ~24 min
- 03Argo CD rollback and history — `argocd app rollback`, `argocd app history`, and the rollback UIArgoCD · advanced · ~22 min
- 04Flux rollback via revert — `git revert` plus reconcile, and the workflow the controller followsFlux · advanced · ~24 min
- 05The rollback decision framework — when to revert Git, when to deploy a hotfix, when to forward-fixDecisionFramework · advanced · ~24 min
- 05The rollback decision framework — when to revert Git, when to deploy a hotfix, when to forward-fixDecisionFramework · advanced · ~24 min
- 06Post-rollback investigation — the audit trail, the fix-forward, and the lesson that closes the loopPostRollback · advanced · ~22 minLab
Part LXXXVI
GitOps Failure Modes
Repository unavailable, auth failure, controller unavailable, bad manifests, unhealthy deployment, prune incident, secret dependency failure.
- 01Repository unavailable — what happens when Git is downDetection · advanced · ~22 min
- 02Authentication failure — token expired, key rotatedDetection · advanced · ~23 min
- 03Controller unavailable — the GitOps control plane is downDetection · advanced · ~25 minLab
- 04Bad manifests — the controller refuses to applyDetection · advanced · ~26 min
- 05Unhealthy deployment — synced but brokenDetection · advanced · ~25 min
- 06Secret dependency failure — External Secrets Operator cannot reach VaultDetection · advanced · ~26 min
Part LXXXVII
GitOps During Incidents
Pragmatic break-glass: incident, emergency change, restore, document, update Git, restore reconciliation.
- 01The incident versus GitOps tension — when the model fights the responderFoundations · advanced · ~22 min
- 02Break-glass procedures — the discipline of breaking the model on purposeBreakGlass · advanced · ~24 minLab
- 03Disabling self-heal — how, who, and for how longSelfHeal · advanced · ~26 min
- 04Post-incident Git reconciliation — the manual change must enter GitReconciliation · advanced · ~24 min
- 05The postmortem and the policy update — what changes after the incidentPostmortem · advanced · ~25 min
- 06Pragmatism versus purity — when GitOps can waitPragmatism · advanced · ~23 min
Part LXXXVIII
Infrastructure GitOps
Beyond simple application deployment where tooling actually supports it.
- 01What infrastructure GitOps is — Terraform, Pulumi, and reconciliationFoundations · advanced · ~24 min
- 02Terraform and GitOps with Atlantis — pull-request-driven plan and applyFoundations · advanced · ~26 min
- 03Terraform and the Argo CD application controller — manifests as Git stateFoundations · advanced · ~24 min
- 04Pulumi and Kubernetes GitOps — the Kubernetes operator patternFoundations · advanced · ~24 min
- 05Network and firewall GitOps — when the tooling supports itFoundations · advanced · ~24 min
- 06The infrastructure GitOps limitations — state, drift, secretsFoundations · advanced · ~26 min
Part LXXXIX
Repository Security
MFA, access control, branch protection, signing, ownership, audit.
- 01MFA and account security — the first line of repository defenceRepoSecurity · advanced · ~22 min
- 02Access control and the principle of least privilegeRepoSecurity · advanced · ~24 min
- 03Branch protection deep dive — the full set of optionsRepoSecurity · advanced · ~26 min
- 04Required status checks — what runs and what must passRepoSecurity · advanced · ~24 min
- 05Secret scanning and push protection — native controls and gitleaksRepoSecurity · advanced · ~25 min
- 06Repository audit and monitoring — who changed what, whenRepoSecurity · advanced · ~26 min
Part XC
CI Platform Security
What CI can access: cloud, Kubernetes, Terraform state, registries, secret stores, production networks.
- 01What the CI platform can touch — the blast radius of a CI compromiseBlastRadius · advanced · ~22 min
- 02Cloud access from CI — what cloud credentials doCloudAccess · advanced · ~22 min
- 03Kubernetes access from CI — what cluster credentials doClusterAccess · advanced · ~23 min
- 04Terraform state access from CI — what state access enablesStateAccess · advanced · ~23 min
- 05Registry and secret store access from CI — what registry and secret-store creds enableRegistryAndSecrets · advanced · ~25 min
- 06Production network access from CI — the production boundaryProductionBoundary · advanced · ~26 min
Part XCI
Least Privilege CI/CD
Validation identity is not the production deployment identity.
- 01The validation versus deployment identity — two identities, two boundariesIdentities · advanced · ~24 min
- 02Scoped IAM roles — what each role can do; the smallest setCloudIAM · advanced · ~26 min
- 03Scoped Kubernetes RBAC — ServiceAccounts, Roles, RoleBindingsClusterRBAC · advanced · ~25 min
- 04Ephemeral per-job credentials — OIDC short-lived tokensEphemeralCredentials · advanced · ~26 min
- 05Least privilege in GitOps — what the controller can do; what it cannotGitOpsRBAC · advanced · ~24 min
- 06The least-privilege decision — what to lock down firstPrioritisation · advanced · ~23 min
Part XCII
Protected Environments
Platform mechanisms for production environment protection.
- 01The protected environment pattern — the platform-side guard for production deploysPattern · advanced · ~24 min
- 02Required reviewers and the wait timer — the human gate that buys the team five minutesReviewers · advanced · ~25 min
- 03Environment secrets and isolation — secrets scoped to a deployment targetSecrets · advanced · ~24 min
- 04Deployment branch restriction — only the right source can deploy to productionBranches · advanced · ~23 min
- 05Bypass and bypass actors — the role-based exceptions that weaken the gateBypass · advanced · ~26 min
- 06Environment policy as code — terraform-github-actions and terraform-gitlab-providerAsCode · advanced · ~25 min
Part XCIII
Credential Rotation
Deploy keys, tokens, cloud credentials, registry credentials, GitOps credentials.
- 01Why rotate credentials — the cost of long-lived secretsFoundations · advanced · ~24 min
- 02Deploy keys and SSH key rotation — the lifecycle of a read/write credential for a Git remoteDeployKeys · advanced · ~25 minLab
- 03Token rotation cadence — PAT, OAuth, and OIDC tokensTokenRotation · advanced · ~24 min
- 04Cloud credential rotation — IAM access keys and OIDC federationCloudCredentials · advanced · ~26 min
- 05Registry credential rotation — push and pull credentialsRegistryCredentials · advanced · ~22 min
- 06GitOps controller credential rotation — the controller's repository and cluster accessControllerCredentials · advanced · ~25 minLab
Part XCIV
Incident: Secret Leak
Response order - revoke/rotate first, assess exposure, inspect usage, remove repo exposure, audit, prevent recurrence.
- 01The incident arrives — first alert, first scope, first ten minutesIncidentResponse · advanced · ~24 min
- 02Revoke or rotate first — the first action and the rationale that forces itIncidentResponse · advanced · ~28 min
- 03Assess exposure — who had access and what was used in the windowIncidentResponse · advanced · ~26 min
- 04Inspect usage — log analysis and the timeline that survives the auditIncidentResponse · advanced · ~26 min
- 05Remove repository exposure — history cleanup with filter-repoIncidentResponse · advanced · ~28 min
- 06Prevent recurrence — the controls that should have caught itIncidentResponse · advanced · ~28 min
Part XCV
Incident: Compromised Runner
Isolation, credential revocation, artifact impact analysis, job history, clean rebuild.
- 01The runner incident arrives — detection, initial scope, first ten minutesIncidentResponse · advanced · ~24 min
- 02Isolate the runner — remove from pool, drain new jobs, preserve evidenceIncidentResponse · advanced · ~28 min
- 03Revoke credentials — what credentials did the runner have, and how to revoke themIncidentResponse · advanced · ~26 min
- 04Determine artifact impact — what artifacts did the runner produce, and which are suspectIncidentResponse · advanced · ~26 min
- 05Invalidate and rebuild — the rebuild from clean source, on a clean runnerIncidentResponse · advanced · ~28 min
- 06Prevent recurrence — ephemeral runners, network isolation, attestation per jobIncidentResponse · advanced · ~28 min
Part XCVI
Incident: Malicious Dependency
Stop builds, identify impacted artifacts, rotate credentials, rebuild trusted artifacts, improve controls.
- 01The supply-chain incident arrives — detection and initial triageIncidentResponse · advanced · ~26 min
- 02Stop affected builds — pause CI and pin to known-goodIncidentResponse · advanced · ~28 min
- 03Identify impacted artifacts — what used the bad versionIncidentResponse · advanced · ~26 min
- 04Rotate credentials and revoke tokens — what the malicious code touchedIncidentResponse · advanced · ~26 min
- 05Rebuild trusted artifacts — clean source, pinned versionsIncidentResponse · advanced · ~28 min
- 06Improve dependency controls — lockfile enforcement, scan-on-PRIncidentResponse · advanced · ~28 min
Part XCVII
CI/CD Disaster Recovery
Recovery of CI configuration, runners, secrets, artifact registry, deployment process.
- 01The CI/CD DR question — what fails, what survives, what to rebuildDisasterRecovery · advanced · ~24 min
- 02Recovering the control plane — hosted service versus self-hostedDisasterRecovery · advanced · ~26 min
- 03Recovering runners — the rebuild plan; the registration tokensDisasterRecovery · advanced · ~26 min
- 04Recovering secrets — the secret store; the rotationDisasterRecovery · advanced · ~24 min
- 05Recovering the artifact registry — the backup planDisasterRecovery · advanced · ~22 min
- 06The disaster recovery drill — the quarterly rehearsalDisasterRecovery · advanced · ~24 min
Part XCVIII
Git Hosting Failure
Continuity options and limitations.
- 01The Git hosting failure scenario — what happens when the platform is downGitHostingFail · advanced · ~24 min
- 02Multi-remote failover — two remotes, automatic failoverGitHostingFail · advanced · ~25 min
- 03Mirror repositories and CDN — the read-only fallbackGitHostingFail · advanced · ~26 min
- 04Local bare repository fallback — the last resortGitHostingFail · advanced · ~24 min
- 05Self-hosted Git as fallback — Gitea, GitLab CEGitHostingFail · advanced · ~26 min
- 06Recovery time objectives — what RTO is acceptable for a Git hosting failureGitHostingFail · advanced · ~26 min
- 07Self-hosted forge and CI control-plane lifecycleSelf-hosted platform operations · advanced · ~30 min
Part XCIX
Artifact Registry Failure
Impact on deployment and recovery.
- 01The registry failure scenario — when pulls return 503 and the deploy falls overRegistryFail · advanced · ~24 minLab
- 02Impact on deployment — what stops working, what keeps workingRegistryFail · advanced · ~24 min
- 03Registry replication — the multi-region strategyRegistryFail · advanced · ~26 min
- 04Immutable tag fallback — when :latest is the only optionRegistryFail · advanced · ~24 min
- 05Registry monitoring and alerting — the metrics that matterRegistryFail · advanced · ~26 min
- 06The registry drill — the quarterly rehearsalRegistryFail · advanced · ~26 min
Part C
Runner Capacity
Queueing, concurrency, ephemeral runner sizing, autoscaling.
- 01Runner pool sizing — the workload model and the concurrency limitSizing · advanced · ~22 min
- 02Queueing and wait times — what happens when jobs exceed capacitySizing · advanced · ~22 min
- 03Ephemeral runner sizing — per-job cost and the speed-versus-money trade-offSizing · advanced · ~22 min
- 04Runner autoscaling with ARC — Kubernetes-based scale to zeroAutoscaling · advanced · ~24 min
- 05Cost of hosted versus self-hosted runners — the financial trade-offCost · advanced · ~22 min
- 06The capacity plan — the document that turns numbers into a budgetPlan · advanced · ~24 min
Part CI
Pipeline Performance
Optimisation only after measurement.
- 01Measure before optimising — the metrics and the baselineMeasure · intermediate · ~22 min
- 02Cache and sharding — the two levers for pipeline durationLevers · intermediate · ~22 min
- 03Parallelism and matrix — fan-out, fan-in, and the trade-offsParallelism · intermediate · ~24 min
- 04Artifact and layer caching — Docker layer cache and build cacheBuild cache · intermediate · ~23 min
- 05Skip when nothing changed — path filters and conditional executionSkip rules · intermediate · ~22 min
- 06The performance loop — measure, optimise, re-measureThe loop · intermediate · ~22 min
Part CII
Large Repository Performance
Binaries, Git LFS, shallow/partial clones, repository design.
- 01The large repository problem — clone, fetch, and checkout at scaleFoundations · intermediate · ~18 min
- 02Binaries and large files — what does not belong in GitBoundaries · intermediate · ~18 min
- 03Git LFS fundamentals — pointers and object storageLFS · intermediate · ~20 min
- 04Shallow clones and partial checkouts — fetching less historyShallowAndPartial · intermediate · ~20 min
- 05Sparse-checkout and filter — only what you needSparse · intermediate · ~22 min
- 06Repository design discipline — prevention versus cureDiscipline · intermediate · ~22 min
Part CIII
Infrastructure Repository Anti-Patterns
Committed secrets, Terraform state in Git, generated files, no ownership, direct production pushes, mutable dependencies.
- 01Committed secrets in IaC — credentials that should never reach GitAntiPatterns · intermediate · ~24 min
- 02Terraform state in Git — the file that does not belong in the repositoryAntiPatterns · intermediate · ~26 min
- 03Generated files in the repository — why build output does not belong in GitAntiPatterns · intermediate · ~22 min
- 04No ownership or CODEOWNERS — the repository without a reviewer mapAntiPatterns · intermediate · ~24 min
- 05Direct production pushes — bypassing the merge gateAntiPatterns · intermediate · ~25 min
- 06Mutable dependencies and loose tags — the tag that is not a contractAntiPatterns · intermediate · ~26 min
Part CIV
CI/CD Anti-Patterns
Permanent privileged runners, secrets in logs, mutable dependencies, no artifact identity, rebuilding per environment, unsafe automatic apply.
- 01Permanent privileged runners — long-lived self-hosted runners with standing credentialsRunnerHardening · intermediate · ~22 min
- 02Secrets in logs — why masking is not enoughLoggingHygiene · intermediate · ~22 min
- 03Mutable dependencies — the floating-tag contractDependencyPinning · intermediate · ~23 min
- 04No artifact identity — relying on tags instead of digestsArtifactIdentity · intermediate · ~25 min
- 05Rebuilding per environment — why promotion, not re-buildPromotion · intermediate · ~24 min
- 06Unsafe auto-apply — auto-merge without guardrailsAutoApply · intermediate · ~26 min
Part CV
GitOps Anti-Patterns
Cluster-admin everywhere, unsafe prune, plaintext secrets, uncontrolled drift, no environment separation.
- 01Cluster-admin everywhere — the controller holds the keys to the clusterControllerPrivilege · advanced · ~24 min
- 02Unsafe prune — automated deletion without a diff, a sandbox, or an opt-outUnsafePrune · advanced · ~24 min
- 03Plaintext secrets in Git — the secrets that the repository remembersPlaintextSecrets · advanced · ~24 min
- 04Uncontrolled drift — when the cluster forgets GitUncontrolledDrift · advanced · ~24 min
- 05No environment separation — one controller, one repo, every clusterEnvironmentSeparation · advanced · ~26 min
- 06The GitOps discipline — the synthesisSynthesis · advanced · ~26 min
Part CVI
Change Management
Every infrastructure change answers: what, why, which commit, which environment, which artifact, what validation, what blast radius, what rollback, who owns it.
- 01The change question — six questions a change must answer before it is appliedTheQuestion · intermediate · ~22 min
- 02The change record — the artefact that survives the changeTheRecord · intermediate · ~24 min
- 03The change author and approver — the human links in the audit chainRoles · intermediate · ~25 min
- 04The change rollback plan — what we do when the change goes wrongRollback · intermediate · ~26 min
- 05The change communication — who needs to know, when, and howComms · intermediate · ~24 min
- 06The change postmortem — what we learned and what we change nextPostmortem · intermediate · ~26 min
Part CVII
Production Infrastructure Delivery Architecture
Reference diagram of engineer to Git to pull request to CI to artifact to approval to GitOps to production.
- 01The reference architecture — the diagram and the componentsArchitecture · advanced · ~24 min
- 02The trust boundaries — where the system trusts and does notBoundaries · advanced · ~25 min
- 03The identity flow — from engineer to commit to productionIdentity · advanced · ~26 min
- 04The artifact flow — from source to image to deploymentArtifact · advanced · ~26 min
- 05The deployment flow — from plan to apply to runtimeDeployment · advanced · ~26 min
- 06The observability flow — what we see and what we do notObservability · advanced · ~25 min
Part CVIII
Infrastructure-as-Code Integration
How Terraform, Ansible, Kubernetes, Docker, networking pipelines connect.
- 01The IaC tooling landscape — Terraform, Ansible, Kubernetes, Docker, and the boundariesOverview · advanced · ~26 min
- 02Terraform in the pipeline — plan as artefact, apply as gateTerraform · advanced · ~28 min
- 03Ansible in the pipeline — the role, the limits, the dry-runAnsible · advanced · ~26 min
- 04Kubernetes in the pipeline — manifest validation and the GitOps syncKubernetes · advanced · ~28 min
- 05Docker and OCI in the pipeline — the container build and the registryDocker · advanced · ~26 min
- 06Network IaC in the pipeline — the missing pieceNetwork · advanced · ~24 min
Part CIX
Terraform Delivery Pipeline
End-to-end Terraform delivery: lint, validate, scan, plan, review, apply, drift, audit.
- 01The Terraform delivery pipeline — an end-to-end viewPipelineShape · advanced · ~26 min
- 02fmt and validate in CI — the cheapest checksFormatAndValidate · advanced · ~24 min
- 03tflint and fmt-deep in CI — the lint layerLintLayer · advanced · ~25 min
- 04tfsec and checkov in CI — the security layerSecurityLayer · advanced · ~28 min
- 05Plan as an artifact — the review surfacePlanArtifact · advanced · ~27 min
- 06Apply and drift detection — the production boundaryApplyAndDrift · advanced · ~28 min
Part CX
Ansible Delivery Pipeline
End-to-end Ansible delivery: lint, syntax, Molecule, staged validation, idempotency.
- 01The Ansible delivery pipeline — an end-to-end viewPipelineShape · advanced · ~28 min
- 02YAML and lint in CI — yamllint and ansible-lint as the first gatesLint · advanced · ~26 min
- 03Syntax check and Molecule — the static and dynamic checkSyntaxAndTest · advanced · ~28 min
- 04Staged validation environments — dev, staging, prodEnvironments · advanced · ~26 min
- 05Idempotency and change detection — the production disciplineIdempotency · advanced · ~28 min
- 06Secrets and runtime variables — the safe-handling patternSecrets · advanced · ~28 min
Part CXI
Kubernetes Delivery Pipeline
CI plus GitOps for Kubernetes workloads.
- 01The Kubernetes delivery pipeline — an end-to-end viewPipelineShape · advanced · ~26 min
- 02Manifest render and validate — the CI side of the pipelineCIRenderValidate · advanced · ~27 min
- 03Helm or Kustomize build — the packaging decisionPackaging · advanced · ~25 min
- 04Container image build and push — the immutable artefactImageArtifact · advanced · ~28 min
- 05GitOps sync and reconcile — the production entry pointGitOpsSync · advanced · ~27 min
- 06The CD loop closing — observability and feedbackObservabilityFeedback · advanced · ~24 min
Part CXII
Container Delivery Pipeline
Source, test, build, SBOM, scan, sign, registry, deploy.
- 01The container delivery pipeline — end-to-end viewPipelineShape · advanced · ~26 min
- 02Source to test — lint, unit, integrationSourceToTest · advanced · ~26 min
- 03Build and OCI image — BuildKit, multi-stageBuildAndOCI · advanced · ~28 min
- 04SBOM and vulnerability scan — syft and trivySBOMAndScan · advanced · ~27 min
- 05Sign and verify — cosign and the policySignAndVerify · advanced · ~26 min
- 06Registry and deploy — the artefact goes homeRegistryAndDeploy · advanced · ~27 min
Part CXIII
Observability Integration
Deployment-event correlation across metrics, logs, traces.
- 01Observability as deployment marker — the change-cause annotationChangeCause · intermediate · ~24 min
- 02Deploy events and correlation — the timeline viewCorrelation · intermediate · ~24 min
- 03Performance change detection — did the deploy cause the regressionPerfDetect · intermediate · ~26 min
- 04Error rate and deploys — the deploy-to-error graphErrorRate · intermediate · ~24 min
- 05Audit logs from the pipeline — who did whatAudit · intermediate · ~24 min
- 06The observability of observability — meta-monitoringMetaMonitor · intermediate · ~26 min
Part CXIV
Deployment Markers
Deployment, telemetry annotation/event, performance/error change correlation.
- 01The deployment marker pattern — leaving a trailPattern · intermediate · ~22 min
- 02The change-cause annotation — the kubectl annotation and the OpenTelemetry attributeChangeCause · intermediate · ~24 min
- 03Deploy timestamp and version labels — the runtime identityRuntimeIdentity · intermediate · ~24 min
- 04The deploy event log — the platform-side auditAuditLog · intermediate · ~25 min
- 05Correlation with metrics and logs — the joined queryCorrelation · intermediate · ~26 min
- 06The 3 AM incident and the deploy marker — the real testRealTest · intermediate · ~26 min
Part CXV
Production Operating Model
Responsibilities among application, platform, infrastructure, security, reviewers.
- 01The application and platform split — who owns whatFoundations · intermediate · ~24 min
- 02The infrastructure team role — the boundariesInfraRole · intermediate · ~24 min
- 03The platform team role — the shared capabilityPlatformRole · intermediate · ~25 min
- 04The security team role — the advisory and auditSecurityRole · intermediate · ~25 min
- 05The reviewer and approver role — the human gateReviewerRole · intermediate · ~25 min
- 06The shared responsibility model — the synthesisSharedModel · intermediate · ~26 min
Part CXVI
Governance Without Bureaucracy
Controls that improve safety without meaningless approval chains.
- 01The control versus the bureaucracy — the trade-offControls · advanced · ~22 min
- 02Structural versus procedural controls — the differenceControls · advanced · ~24 min
- 03Policy as code — OPA, Conftest, and KyvernoPolicyAsCode · advanced · ~26 min
- 04Shifted-left controls — catching at PR time, not deploy timeShiftLeft · advanced · ~24 min
- 05Continuous compliance — the automated auditCompliance · advanced · ~25 min
- 06The least bureaucratic controls — the disciplineDiscipline · advanced · ~26 min
Part CXVII
Compliance and Audit
Reconstruction: who, what, why, which commit, artifact, pipeline, tests, environment.
- 01The compliance reconstruction question — what the auditor asksReconstruction · advanced · ~24 min
- 02The reconstructability test — can you answer every question?Reconstruction · advanced · ~26 min
- 03The deployment receipt — the artefact of recordArtefacts · advanced · ~26 min
- 04The change authorisation record — the approval trailArtefacts · advanced · ~25 min
- 05Segregation of duties in the pipeline — the structural controlControls · advanced · ~27 min
- 06Six months later and the auditor — the practical testReconstruction · advanced · ~27 min
Part CXVIII
Final Reference Architecture
Complete production-quality reference: Git, CI control plane, ephemeral runners, artifact registry, secret manager, short-lived identities, GitOps controllers, environments, observability, audit.
- 01The reference architecture — the integrated view of every fleetArchitecture · advanced · ~28 minLab
- 02The GitHub Actions control plane — the CI fleetCI · advanced · ~26 min
- 03The Argo CD control plane — the GitOps fleetGitOps · advanced · ~27 min
- 04The ephemeral runner fleet — the execution surfaceExecution · advanced · ~25 min
- 05The artifact registry fleet — the artifact layerArtifact · advanced · ~26 min
- 06The observability and audit fleet — the operational visibilityObservability · advanced · ~27 min
Part Labs
Labs
Hands-on disposable-environment labs covering Git plumbing, conflict resolution, recovery, CI/CD pipeline construction, supply-chain tooling, GitOps controller installation, drift, rollback, and incident response.
No lessons published in this part yet. The full curriculum is planned in docs/courses/git-cicd-gitops/curriculum.md on GitHub.
Part Runbooks
Runbooks
Operational procedures for Git recovery, CI failure triage, runner restoration, secret leak response, GitOps reconciliation, environment promotion, and supply-chain compromise.
Part Checklists
Checklists
Production readiness reviews for repositories, pipelines, runners, supply chains, artifacts, deployments, GitOps, secrets, rollback, and DR.
Part Breakfix
Break/Fix Scenarios
Evidence-first diagnosis of Git, CI/CD, and GitOps failure modes (recovery, secrets, runner, dependency, environment, prune, reconcile).
Part Capstone
Production Capstone
A complete production infrastructure delivery environment with ten injected incidents.
No lessons published in this part yet. The full curriculum is planned in docs/courses/git-cicd-gitops/curriculum.md on GitHub.
Part Final
Final Assessment
Final theory assessment plus final practical assessment of an inherited delivery environment.
- 01Git internals and recovery — recapFinal Review · advanced · ~25 min
- 02CI/CD architecture and runner security — recapFinal Review · advanced · ~28 min
- 03Supply chain and signing — recapFinal Review · advanced · ~28 min
- 04GitOps reconciliation and drift — recapFinal Review · advanced · ~28 min
- 05Incident response and secrets — recapFinal Review · advanced · ~28 min
- 06Auditability and compliance — recapFinal Review · advanced · ~28 min