Understanding Continuous Integration and Continuous Delivery concepts, tracing the evolution of CI/CD from self-hosted Jenkins to cloud-native tools, then answering the key question: why choose GitHub Actions since it launched in 2019 until now.

In episode 0 you prepared three skill foundations — Git, YAML, and bash — plus a complete environment with GitHub CLI and VS Code. Now it's time to stop typing for a moment and understand why we're all here. Before writing workflows, you must fully grasp what CI/CD is, how the tools evolved from self-managed servers to cloud-native services, and why GitHub Actions is the most sensible choice for teams already living in the GitHub ecosystem.
Believe it or not, the biggest mistake beginners make is writing YAML workflows directly without understanding the underlying concepts — the result is a pipeline that's just a collection of hard-to-maintain copy-pasted commands. This episode builds that conceptual foundation.
Continuous Integration is the practice of integrating code into a shared branch (usually main) as often as possible — every time there's a new commit or pull request — and automatically running a process that ensures those changes don't break anything. That process includes:
The analogy: CI is like a checkpoint in a video game. Every time you complete a level (commit), the system saves your progress and immediately tests whether you can continue. If you fail, you know exactly which level to retry — without having to wait until the end of the game.
The end goal is a main branch that is always green (green build): every commit on the main branch is guaranteed to pass build and test.
Continuous Delivery is an extension of CI: after code passes all tests, it is always ready to be released to production. The difference is that the release still awaits manual approval — the team decides when to press the deploy button. This gives control while ensuring the release process can happen anytime without drama.
Continuous Deployment takes it one step further: every change that passes the pipeline is automatically deployed to production without human intervention. Manual approval is only placed at truly critical stages, such as deployment to the production environment.
A simple visualization of both flows:
Commit / Pull Request baru
|
v
CI Pipeline: build -> unit test -> lint -> code scan
|
v
Berhasil? ---- tidak ----> developer perbaiki & commit ulang
|
ya
v
CD Pipeline: deploy staging -> E2E test -> approval gate
|
v
Deploy produksi / rilis versi baruNotice the position of the approval gate in the flow above: that's the key difference between Continuous Delivery (stops to wait for approval) and Continuous Deployment (runs automatically all the way to production).
The CI/CD tool journey can be summarized in three eras:
The Self-hosted Era (2000s). Jenkins (originally named Hudson, born around 2004/2005) became the industry standard. Powerful and flexible with thousands of plugins, but you're fully responsible for its servers: installation, updates, security hardening, and agent scaling. In large teams, maintaining a Jenkins farm is a full-time job in itself.
The Cloud-native Era (2010s). CI/CD tools that run as (managed) services were born: Travis CI, CircleCI, then GitLab CI. The concept is the same as Jenkins — pipeline as code — but the server is managed by the provider, and builds run on runners billed per minute. Teams no longer busy themselves maintaining servers, instead focusing on pipeline logic.
The Git-native Integration Era (2019-present). Microsoft acquired GitHub in 2018, and in 2019 GitHub Actions officially reached general availability after a beta period. What sets it apart isn't just "CI/CD in the cloud", but its integration that is fused with every repository event and the birth of GitHub Marketplace — an ecosystem of ready-made actions that can be shared across repositories and teams around the world.
There are three main reasons that make GitHub Actions stand out:
Native integration with GitHub. Actions isn't a tool "hooked into" GitHub via webhook; it's part of the platform itself. Events like push, pull_request, issues, and release automatically become triggers without extra configuration. Pipeline status even appears directly in the Checks tab on every pull request.
Thousands of actions in GitHub Marketplace. You don't have to write everything from scratch. Popular actions like actions/checkout for cloning the repository, actions/setup-node for setting up the Node.js runtime, or deploy-to-Vercel actions — all are ready to use. It's like choosing from a shelf of ready-made libraries, complete with versioning.
Generous free quotas. Public repositories get unlimited free runner minutes, and private repositories still get a monthly free quota that's enough for learning and small projects. Plus a transparent per-minute pricing model with no server licensing fees.
| Aspect | Jenkins | GitHub Actions | GitLab CI |
|---|---|---|---|
| Hosting model | Self-hosted (needs your own server) | Cloud-native, managed by GitHub | Cloud-native, managed by GitLab |
| Pipeline definition | Jenkinsfile (Groovy) | YAML in .github/workflows | YAML in .gitlab-ci.yml |
| VCS integration | Needs plugins & webhook config | Native (push, PR, issue, release) | Native in GitLab |
| Extension ecosystem | Thousands of plugins (legacy) | Marketplace with thousands of actions | Templates & components |
| Runner | Self-managed agents | GitHub-hosted + self-hosted | GitLab-hosted + shared |
| Best for | Large teams with their own infrastructure | Teams already using GitHub | Teams using GitLab end-to-end |
There's no absolutely wrong choice — Jenkins remains excellent for full control, and GitLab CI excels for teams wanting one platform from repo to monitoring. But for those whose repositories are already on GitHub, Actions removes integration and server maintenance costs while giving access to the largest action ecosystem in the world.
Note
The terms "runner" and "workflow" will become your daily vocabulary. Don't worry if they still sound abstract — in episode 2 we'll dissect the entire GitHub Actions architecture one by one.
In episode 1 you built an important conceptual foundation:
Now you know why; it's time to understand how. In episode 2 we'll dissect the core GitHub Actions architecture: what workflow, event, job, step, action, and runner are, how they relate to each other, and the difference between GitHub-hosted and self-hosted runners. See you in episode 2!