
GitHub Actions CI/CD for a team with no DevOps person
A minimal GitHub Actions setup for a team without a dedicated DevOps person: what to build, what to skip, and whether the free tier actually covers you.
GitHub Actions handles CI/CD for a small team with no dedicated DevOps person just fine, as long as the setup stays genuinely minimal: run the tests on every push, deploy on merge to main, and add nothing else until a specific problem actually shows up. Most GitHub Actions tutorials build toward a feature tour instead, matrix builds, reusable workflows, self-hosted runners, before a reader has any reason to need them.
The actual minimal GitHub Actions setup
A real workflow for this, nothing more:
name: CI/CD
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
deploy:
needs: test
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./deploy.shTwo jobs, one dependency between them. test runs on every push and every pull request; deploy only runs after test passes, and only on a direct push to main, so a pull request never triggers a deploy. That needs: test line is the whole safety mechanism: no deploy step, no separate approval gate, no environment protection rule, just a passing test suite as the gate. For a team where "who approves the deploy" is genuinely "whoever's watching," that's the correct amount of process, not a shortcut.
Is GitHub Actions actually free
Mostly, at small-team scale. GitHub's own billing documentation confirms GitHub Free includes 2,000 Actions minutes a month for private repositories, with 500 MB of artifact storage and a separate 10 GB of cache storage per repository. GitHub Pro and Team both raise that to 3,000 minutes a month, with 1 GB and 2 GB of artifact storage respectively. Actions on public repositories don't consume minutes at all, on any plan.
A two-job pipeline like the one above, running a few minutes per push, stays comfortably inside 2,000 minutes for most small teams. The ceiling shows up fast once matrix builds enter the picture: testing across three Node versions and two operating systems multiplies every run by six, and that math burns through a monthly allowance in a way a single linear pipeline never does.
This is also where github actions vs jenkins actually resolves. Jenkins buys self-managed infrastructure and complete control over the runner environment, real value if you need it. For a team with no one whose job is running that infrastructure, GitHub Actions' hosted minutes are the actual point, not a workaround. Paying in minutes instead of in a person's time is the trade a small team should want.
Where this breaks down
This setup stops being enough at a specific, recognizable point, not a vague "eventually":
- Multiple environments: staging and production each need their own approval before a deploy, so the single
deployjob above has to split and gain a manual gate. - A real audit or compliance requirement: the deploy step needs to log who approved what, which GitHub Actions' environment protection rules handle, but which isn't worth adding before something actually requires it.
- A build matrix that isn't optional anymore: the team genuinely supports more than one runtime version in production, not because a tutorial included a matrix by default.
None of those apply to most small teams running a single service on a single environment. Adding them early is the same mistake as the tutorials this piece is written against: solving a problem the reader doesn't have yet, at the cost of a pipeline that's now harder to reason about than the thing it's protecting.
The honest verdict: a two-job GitHub Actions workflow is the right amount of CI/CD for a small team deploying a single-box production setup, and the free tier's 2,000 minutes will cover it. The signal to add more isn't team size, it's a real requirement showing up, an approval step someone actually needs, a runtime version someone actually has to support.
Yes, up to a monthly minute allowance that depends on the plan: 2,000 minutes on GitHub Free, 3,000 minutes on GitHub Pro or Team. Artifact storage is capped separately (500 MB on Free, 1 GB on Pro, 2 GB on Team), with a further 10 GB of cache storage per repository included on every plan. Actions on public repositories don't consume minutes at all, on any plan.
Usually not, for a small team. Jenkins earns its keep when you need full control over the runner environment or infrastructure GitHub doesn't host, not because it's inherently more capable for a standard test-and-deploy pipeline. The real tradeoff is hosted minutes you don't manage versus self-managed infrastructure you do, and a team without a DevOps role should default to not managing infrastructure it doesn't need to.
One workflow file with two jobs: run the test suite on every push, deploy on merge to main. That covers real production traffic for a small team. Add anything else, matrix testing across versions, staged environments, manual approval gates, only when a specific, current problem actually requires it, not because a tutorial included it.
- GitHub Docs, About billing for GitHub Actions: Current private-repo minute allowances and artifact storage limits by plan, and confirmation that public-repo Actions usage is free on every plan, verified 2026-08-10.